From 01407bbbf341a91b5346725921bad45c6c43a6a4 Mon Sep 17 00:00:00 2001 From: Fabian Peller-Konrad <fabian.peller-konrad@kit.edu> Date: Fri, 1 Jul 2022 09:52:26 +0200 Subject: [PATCH] renamed enums of aron. Splitted aron in codegeneration and core. Updates to skills framework. Fixed aron dto types and removed useless ice type. --- .../AronCodeGenerator/CMakeLists.txt | 2 +- .../applications/AronCodeGenerator/main.cpp | 4 +- .../SkillProviderExample.cpp | 9 +- .../SkillProviderExample.h | 8 +- .../SkillManagerMonitorWidgetController.cpp | 36 +- .../SkillManagerMonitorWidgetController.h | 11 +- .../visitors/AronTreeWidgetConverter.cpp | 7 - .../visitors/AronTreeWidgetConverter.h | 1 - .../visitors/AronTreeWidgetCreator.cpp | 3 - .../visitors/AronTreeWidgetCreator.h | 1 - .../visitors/AronTreeWidgetModalCreator.cpp | 6 - .../visitors/AronTreeWidgetModalCreator.h | 1 - source/RobotAPI/interface/aron/Aron.ice | 70 +- .../skills/SkillManagerInterface.ice | 9 +- .../ltm/base/converter/image/Converter.h | 2 +- .../ltm/base/converter/object/Converter.h | 2 +- .../imageExtractor/DepthImageExtractor.cpp | 2 +- .../imageExtractor/DepthImageExtractor.h | 2 +- .../imageExtractor/ImageExtractor.cpp | 2 +- .../extractor/imageExtractor/ImageExtractor.h | 2 +- source/RobotAPI/libraries/armem/util/util.h | 4 +- .../armem_gui/instance/InstanceView.cpp | 8 +- .../TypedDataDisplayVisitor.cpp | 4 +- .../TypedDataDisplayVisitor.h | 1 - .../tree_builders/TypedDataTreeBuilder.cpp | 2 +- .../tree_visitors/TreeTypedDataVisitor.cpp | 4 +- .../tree_visitors/TreeTypedDataVisitor.h | 6 +- .../tree_visitors/TreeTypedJSONConverter.cpp | 8 +- .../tree_visitors/TreeTypedJSONConverter.h | 1 - .../libraries/armem_gui/test/ArMemGuiTest.cpp | 2 +- .../server/instance/SegmentAdapter.cpp | 2 +- .../armem_robot/aron_conversions.cpp | 4 - source/RobotAPI/libraries/aron/CMakeLists.txt | 2 +- .../aron/codegeneration/CMakeLists.txt | 124 +++ .../codegenerator/codewriter/CodeWriter.h | 8 +- .../codegenerator/codewriter/Factory.h | 0 .../codewriter/cpp/AronGeneratedClass.h | 0 .../codegenerator/codewriter/cpp/Writer.cpp | 6 +- .../codegenerator/codewriter/cpp/Writer.h | 6 +- .../codewriter/cpp/generator/All.h | 1 - .../codewriter/cpp/generator/Factory.cpp | 64 ++ .../codewriter/cpp/generator/Factory.h | 2 +- .../codewriter/cpp/generator/Generator.cpp | 76 +- .../codewriter/cpp/generator/Generator.h | 46 +- .../codewriter/cpp/generator/any/All.h | 0 .../cpp/generator/any/AnyObject.cpp | 33 +- .../codewriter/cpp/generator/any/AnyObject.h | 10 +- .../codewriter/cpp/generator/container/All.h | 0 .../cpp/generator/container/Dict.cpp | 0 .../codewriter/cpp/generator/container/Dict.h | 12 +- .../cpp/generator/container/List.cpp | 0 .../codewriter/cpp/generator/container/List.h | 12 +- .../cpp/generator/container/Object.cpp | 204 +++++ .../cpp/generator/container/Object.h | 17 +- .../cpp/generator/container/Pair.cpp | 0 .../codewriter/cpp/generator/container/Pair.h | 12 +- .../cpp/generator/container/Tuple.cpp | 0 .../cpp/generator/container/Tuple.h | 12 +- .../cpp/generator/detail/AnyGenerator.cpp | 0 .../cpp/generator/detail/AnyGenerator.h} | 4 +- .../generator/detail/ContainerGenerator.cpp | 0 .../cpp/generator/detail/ContainerGenerator.h | 0 .../cpp/generator/detail/NDArrayGenerator.cpp | 0 .../cpp/generator/detail/NDArrayGenerator.h | 0 .../generator/detail/PrimitiveGenerator.cpp | 0 .../cpp/generator/detail/PrimitiveGenerator.h | 0 .../generator/detail/SpecializedGenerator.cpp | 0 .../generator/detail/SpecializedGenerator.h | 2 +- .../codewriter/cpp/generator/enum/All.h | 0 .../codewriter/cpp/generator/enum/IntEnum.cpp | 2 +- .../codewriter/cpp/generator/enum/IntEnum.h | 12 +- .../codewriter/cpp/generator/ndarray/All.h | 0 .../cpp/generator/ndarray/Image.cpp | 12 +- .../codewriter/cpp/generator/ndarray/Image.h | 20 +- .../cpp/generator/ndarray/Matrix.cpp | 23 +- .../codewriter/cpp/generator/ndarray/Matrix.h | 17 +- .../cpp/generator/ndarray/NDArray.cpp | 0 .../cpp/generator/ndarray/NDArray.h | 10 +- .../cpp/generator/ndarray/PointCloud.cpp | 27 +- .../cpp/generator/ndarray/PointCloud.h | 17 +- .../cpp/generator/ndarray/Quaternion.cpp | 17 +- .../cpp/generator/ndarray/Quaternion.h | 17 +- .../codewriter/cpp/generator/primitive/All.h | 0 .../cpp/generator/primitive/Bool.cpp | 0 .../codewriter/cpp/generator/primitive/Bool.h | 2 +- .../cpp/generator/primitive/Double.cpp | 0 .../cpp/generator/primitive/Double.h | 4 +- .../cpp/generator/primitive/Float.cpp | 0 .../cpp/generator/primitive/Float.h | 4 +- .../cpp/generator/primitive/Int.cpp | 0 .../codewriter/cpp/generator/primitive/Int.h | 4 +- .../cpp/generator/primitive/Long.cpp | 0 .../codewriter/cpp/generator/primitive/Long.h | 4 +- .../cpp/generator/primitive/String.cpp | 0 .../cpp/generator/primitive/String.h | 4 +- .../codewriter/cpp/generator/toplevel/All.h | 0 .../cpp/generator/toplevel/IntEnumClass.cpp | 2 +- .../cpp/generator/toplevel/IntEnumClass.h | 16 +- .../cpp/generator/toplevel/ObjectClass.cpp | 4 +- .../cpp/generator/toplevel/ObjectClass.h | 18 +- .../codegenerator/helper/ReaderInfo.h | 0 .../codegenerator/helper/WriterInfo.h | 0 .../aron/codegeneration/test/CMakeLists.txt | 147 ++++ .../test/aron/AnyTest.xml | 0 .../test/aron/BaseClassTest.xml | 0 .../test/aron/DerivedClassTest.xml | 2 +- .../test/aron/DictTest.xml | 0 .../aron/codegeneration/test/aron/DtoTest.xml | 16 + .../test/aron/EnumTest.xml | 0 .../test/aron/HumanPoseTest.xml | 0 .../test/aron/IKResult.xml | 0 .../test/aron/ImageTest.xml | 0 .../test/aron/ListTest.xml | 0 .../test/aron/MatrixTest.xml | 0 .../test/aron/NaturalIKTest.xml | 0 .../test/aron/ObjectTest.xml | 0 .../test/aron/OptionalTest.xml | 0 .../test/aron/OrientationTest.xml | 0 .../test/aron/PointCloudTest.xml | 0 .../test/aron/PoseTest.xml | 0 .../test/aron/PositionTest.xml | 0 .../test/aron/PrimitiveTest.xml | 3 - .../test/aron/QuaternionTest.xml | 0 .../test/aron/TemplateTest.xml | 0 .../test/aronCodeGenerationTest.cpp | 37 +- .../test/aronExtendsTest.cpp | 4 +- .../test/aronNavigateTest.cpp | 5 +- .../test/aronOperatorTest.cpp | 0 .../test/aronRandomizedTest.cpp | 0 .../typereader/Reader.h | 8 +- .../typereader/helper/GenerateInfo.h | 0 .../typereader/helper/GenerateIntEnumInfo.h | 0 .../typereader/helper/GenerateTypeInfo.h | 0 .../typereader/xml/Data.cpp | 2 +- .../typereader/xml/Data.h | 14 +- .../typereader/xml/Factory.cpp | 157 ++-- .../typereader/xml/Factory.h | 5 +- .../typereader/xml/Reader.cpp | 8 +- .../typereader/xml/Reader.h | 4 +- .../AronCodeGenerator.cpp | 39 - .../codegenerationhelper/AronCodeGenerator.h | 50 -- .../aron/codegenerationhelper/CMakeLists.txt | 20 - .../libraries/aron/common/CMakeLists.txt | 4 +- .../libraries/aron/common/aron_conversions.h | 3 - .../aron/common/aron_conversions/core.cpp | 1 - .../aron/common/aron_conversions/core.h | 79 +- .../aron/common/aron_conversions/eigen.h | 2 + .../aron/common/aron_conversions/framed.h | 2 + .../common/aron_conversions/packagepath.h | 2 + .../aron/common/aron_conversions/simox.h | 2 + .../aron/common/aron_conversions/stl.cpp | 2 +- .../aron/common/aron_conversions/stl.h | 195 +---- .../aron/common/aron_conversions/time.cpp | 19 +- .../aron/common/aron_conversions/time.h | 11 +- .../aron/common/test/MyCustomType.cpp | 2 +- .../aron/common/test/aron_common_test.cpp | 3 +- .../aron/common/util/object_finders.h | 2 +- .../libraries/aron/core/CMakeLists.txt | 98 +-- .../RobotAPI/libraries/aron/core/Descriptor.h | 354 ++++---- source/RobotAPI/libraries/aron/core/Path.cpp | 1 - .../libraries/aron/core/aron_conversions.cpp | 6 + .../libraries/aron/core/aron_conversions.h | 391 +++++++++ .../codewriter/cpp/generator/Factory.cpp | 65 -- .../cpp/generator/container/Object.cpp | 104 --- .../cpp/generator/detail/AnyGenerator.h | 66 -- .../cpp/generator/detail/DtoGenerator.cpp | 25 - .../codewriter/cpp/generator/dto/All.h | 8 - .../codewriter/cpp/generator/dto/DateTime.cpp | 88 -- .../codewriter/cpp/generator/dto/DateTime.h | 46 -- .../libraries/aron/core/data/rw/json/Data.h | 76 +- .../aron/core/data/variant/Factory.cpp | 20 +- .../core/data/variant/complex/NDArray.cpp | 14 +- .../aron/core/data/variant/container/Dict.cpp | 8 +- .../aron/core/data/variant/container/Dict.h | 2 +- .../aron/core/data/variant/container/List.cpp | 10 +- .../data/variant/detail/SpecializedVariant.h | 4 +- .../aron/core/data/variant/primitive/Bool.cpp | 8 +- .../core/data/variant/primitive/Double.cpp | 8 +- .../core/data/variant/primitive/Float.cpp | 8 +- .../aron/core/data/variant/primitive/Int.cpp | 8 +- .../aron/core/data/variant/primitive/Long.cpp | 8 +- .../core/data/variant/primitive/String.cpp | 8 +- .../aron/core/data/visitor/RecursiveVisitor.h | 61 +- .../aron/core/data/visitor/Visitor.h | 61 +- .../nlohmannJSON/NlohmannJSONVisitor.cpp | 2 +- .../data/visitor/variant/VariantVisitor.cpp | 20 +- .../data/visitor/variant/VariantVisitor.h | 4 - .../aron/core/legacy/DataVisitor.cpp | 127 --- .../libraries/aron/core/legacy/DataVisitor.h | 265 ------ .../libraries/aron/core/legacy/Randomizer.h | 631 -------------- .../aron/core/legacy/TypedDataVisitor.cpp | 258 ------ .../aron/core/legacy/TypedDataVisitor.h | 379 --------- .../libraries/aron/core/test/CMakeLists.txt | 146 ---- .../libraries/aron/core/test/Randomizer.cpp | 24 - .../libraries/aron/core/test/Randomizer.h | 771 ------------------ .../aron/core/type/converter/Converter.h | 8 - .../libraries/aron/core/type/rw/Reader.h | 11 +- .../libraries/aron/core/type/rw/Writer.h | 3 - .../libraries/aron/core/type/rw/json/Data.h | 95 ++- .../nlohmannJSON/NlohmannJSONReader.cpp | 7 - .../reader/nlohmannJSON/NlohmannJSONReader.h | 35 +- .../type/rw/reader/variant/VariantReader.cpp | 9 - .../type/rw/reader/variant/VariantReader.h | 37 +- .../nlohmannJSON/NlohmannJSONWriter.cpp | 7 - .../writer/nlohmannJSON/NlohmannJSONWriter.h | 1 - .../type/rw/writer/variant/VariantWriter.cpp | 7 - .../type/rw/writer/variant/VariantWriter.h | 1 - .../libraries/aron/core/type/variant/All.h | 1 - .../aron/core/type/variant/Factory.cpp | 39 +- .../aron/core/type/variant/any/AnyObject.cpp | 4 +- .../aron/core/type/variant/container/Dict.cpp | 4 +- .../aron/core/type/variant/container/List.cpp | 4 +- .../core/type/variant/container/Object.cpp | 4 +- .../aron/core/type/variant/container/Pair.cpp | 4 +- .../core/type/variant/container/Tuple.cpp | 4 +- .../aron/core/type/variant/dto/All.h | 11 - .../aron/core/type/variant/dto/DateTime.cpp | 61 -- .../aron/core/type/variant/dto/DateTime.h | 51 -- .../aron/core/type/variant/enum/IntEnum.cpp | 4 +- .../core/type/variant/forward_declarations.h | 1 - .../aron/core/type/variant/ndarray/Image.cpp | 8 +- .../aron/core/type/variant/ndarray/Matrix.cpp | 14 +- .../core/type/variant/ndarray/NDArray.cpp | 4 +- .../core/type/variant/ndarray/PointCloud.cpp | 18 +- .../core/type/variant/ndarray/Quaternion.cpp | 8 +- .../aron/core/type/variant/primitive/Bool.cpp | 4 +- .../core/type/variant/primitive/Double.cpp | 4 +- .../core/type/variant/primitive/Float.cpp | 4 +- .../aron/core/type/variant/primitive/Int.cpp | 4 +- .../aron/core/type/variant/primitive/Long.cpp | 4 +- .../core/type/variant/primitive/String.cpp | 4 +- .../aron/core/type/visitor/RecursiveVisitor.h | 41 +- .../aron/core/type/visitor/Visitor.h | 41 +- .../type/visitor/variant/VariantVisitor.cpp | 9 +- .../type/visitor/variant/VariantVisitor.h | 2 - .../manager/SkillManagerComponentPlugin.cpp | 22 + .../manager/SkillManagerComponentPlugin.h | 3 + .../skills/provider/PeriodicSkill.cpp | 2 +- .../libraries/skills/provider/PeriodicSkill.h | 2 +- .../provider/PeriodicSpecializedSkill.h | 2 +- .../libraries/skills/provider/Skill.cpp | 49 +- .../libraries/skills/provider/Skill.h | 14 +- .../skills/provider/SpecializedSkill.h | 12 +- .../detail/SkillImplementationWrapper.cpp | 2 +- .../helper/LambdaSkillImplementation.cpp | 2 +- .../helper/LambdaSkillImplementation.h | 2 +- 246 files changed, 2034 insertions(+), 4808 deletions(-) create mode 100644 source/RobotAPI/libraries/aron/codegeneration/CMakeLists.txt rename source/RobotAPI/libraries/aron/{core => codegeneration}/codegenerator/codewriter/CodeWriter.h (87%) rename source/RobotAPI/libraries/aron/{core => codegeneration}/codegenerator/codewriter/Factory.h (100%) rename source/RobotAPI/libraries/aron/{core => codegeneration}/codegenerator/codewriter/cpp/AronGeneratedClass.h (100%) rename source/RobotAPI/libraries/aron/{core => codegeneration}/codegenerator/codewriter/cpp/Writer.cpp (98%) rename source/RobotAPI/libraries/aron/{core => codegeneration}/codegenerator/codewriter/cpp/Writer.h (87%) rename source/RobotAPI/libraries/aron/{core => codegeneration}/codegenerator/codewriter/cpp/generator/All.h (89%) create mode 100644 source/RobotAPI/libraries/aron/codegeneration/codegenerator/codewriter/cpp/generator/Factory.cpp rename source/RobotAPI/libraries/aron/{core => codegeneration}/codegenerator/codewriter/cpp/generator/Factory.h (93%) rename source/RobotAPI/libraries/aron/{core => codegeneration}/codegenerator/codewriter/cpp/generator/Generator.cpp (87%) rename source/RobotAPI/libraries/aron/{core => codegeneration}/codegenerator/codewriter/cpp/generator/Generator.h (70%) rename source/RobotAPI/libraries/aron/{core => codegeneration}/codegenerator/codewriter/cpp/generator/any/All.h (100%) rename source/RobotAPI/libraries/aron/{core => codegeneration}/codegenerator/codewriter/cpp/generator/any/AnyObject.cpp (56%) rename source/RobotAPI/libraries/aron/{core => codegeneration}/codegenerator/codewriter/cpp/generator/any/AnyObject.h (76%) rename source/RobotAPI/libraries/aron/{core => codegeneration}/codegenerator/codewriter/cpp/generator/container/All.h (100%) rename source/RobotAPI/libraries/aron/{core => codegeneration}/codegenerator/codewriter/cpp/generator/container/Dict.cpp (100%) rename source/RobotAPI/libraries/aron/{core => codegeneration}/codegenerator/codewriter/cpp/generator/container/Dict.h (82%) rename source/RobotAPI/libraries/aron/{core => codegeneration}/codegenerator/codewriter/cpp/generator/container/List.cpp (100%) rename source/RobotAPI/libraries/aron/{core => codegeneration}/codegenerator/codewriter/cpp/generator/container/List.h (82%) create mode 100644 source/RobotAPI/libraries/aron/codegeneration/codegenerator/codewriter/cpp/generator/container/Object.cpp rename source/RobotAPI/libraries/aron/{core => codegeneration}/codegenerator/codewriter/cpp/generator/container/Object.h (73%) rename source/RobotAPI/libraries/aron/{core => codegeneration}/codegenerator/codewriter/cpp/generator/container/Pair.cpp (100%) rename source/RobotAPI/libraries/aron/{core => codegeneration}/codegenerator/codewriter/cpp/generator/container/Pair.h (82%) rename source/RobotAPI/libraries/aron/{core => codegeneration}/codegenerator/codewriter/cpp/generator/container/Tuple.cpp (100%) rename source/RobotAPI/libraries/aron/{core => codegeneration}/codegenerator/codewriter/cpp/generator/container/Tuple.h (82%) rename source/RobotAPI/libraries/aron/{core => codegeneration}/codegenerator/codewriter/cpp/generator/detail/AnyGenerator.cpp (100%) rename source/RobotAPI/libraries/aron/{core/codegenerator/codewriter/cpp/generator/detail/DtoGenerator.h => codegeneration/codegenerator/codewriter/cpp/generator/detail/AnyGenerator.h} (94%) rename source/RobotAPI/libraries/aron/{core => codegeneration}/codegenerator/codewriter/cpp/generator/detail/ContainerGenerator.cpp (100%) rename source/RobotAPI/libraries/aron/{core => codegeneration}/codegenerator/codewriter/cpp/generator/detail/ContainerGenerator.h (100%) rename source/RobotAPI/libraries/aron/{core => codegeneration}/codegenerator/codewriter/cpp/generator/detail/NDArrayGenerator.cpp (100%) rename source/RobotAPI/libraries/aron/{core => codegeneration}/codegenerator/codewriter/cpp/generator/detail/NDArrayGenerator.h (100%) rename source/RobotAPI/libraries/aron/{core => codegeneration}/codegenerator/codewriter/cpp/generator/detail/PrimitiveGenerator.cpp (100%) rename source/RobotAPI/libraries/aron/{core => codegeneration}/codegenerator/codewriter/cpp/generator/detail/PrimitiveGenerator.h (100%) rename source/RobotAPI/libraries/aron/{core => codegeneration}/codegenerator/codewriter/cpp/generator/detail/SpecializedGenerator.cpp (100%) rename source/RobotAPI/libraries/aron/{core => codegeneration}/codegenerator/codewriter/cpp/generator/detail/SpecializedGenerator.h (94%) rename source/RobotAPI/libraries/aron/{core => codegeneration}/codegenerator/codewriter/cpp/generator/enum/All.h (100%) rename source/RobotAPI/libraries/aron/{core => codegeneration}/codegenerator/codewriter/cpp/generator/enum/IntEnum.cpp (98%) rename source/RobotAPI/libraries/aron/{core => codegeneration}/codegenerator/codewriter/cpp/generator/enum/IntEnum.h (85%) rename source/RobotAPI/libraries/aron/{core => codegeneration}/codegenerator/codewriter/cpp/generator/ndarray/All.h (100%) rename source/RobotAPI/libraries/aron/{core => codegeneration}/codegenerator/codewriter/cpp/generator/ndarray/Image.cpp (91%) rename source/RobotAPI/libraries/aron/{core => codegeneration}/codegenerator/codewriter/cpp/generator/ndarray/Image.h (75%) rename source/RobotAPI/libraries/aron/{core => codegeneration}/codegenerator/codewriter/cpp/generator/ndarray/Matrix.cpp (79%) rename source/RobotAPI/libraries/aron/{core => codegeneration}/codegenerator/codewriter/cpp/generator/ndarray/Matrix.h (77%) rename source/RobotAPI/libraries/aron/{core => codegeneration}/codegenerator/codewriter/cpp/generator/ndarray/NDArray.cpp (100%) rename source/RobotAPI/libraries/aron/{core => codegeneration}/codegenerator/codewriter/cpp/generator/ndarray/NDArray.h (85%) rename source/RobotAPI/libraries/aron/{core => codegeneration}/codegenerator/codewriter/cpp/generator/ndarray/PointCloud.cpp (77%) rename source/RobotAPI/libraries/aron/{core => codegeneration}/codegenerator/codewriter/cpp/generator/ndarray/PointCloud.h (77%) rename source/RobotAPI/libraries/aron/{core => codegeneration}/codegenerator/codewriter/cpp/generator/ndarray/Quaternion.cpp (84%) rename source/RobotAPI/libraries/aron/{core => codegeneration}/codegenerator/codewriter/cpp/generator/ndarray/Quaternion.h (77%) rename source/RobotAPI/libraries/aron/{core => codegeneration}/codegenerator/codewriter/cpp/generator/primitive/All.h (100%) rename source/RobotAPI/libraries/aron/{core => codegeneration}/codegenerator/codewriter/cpp/generator/primitive/Bool.cpp (100%) rename source/RobotAPI/libraries/aron/{core => codegeneration}/codegenerator/codewriter/cpp/generator/primitive/Bool.h (97%) rename source/RobotAPI/libraries/aron/{core => codegeneration}/codegenerator/codewriter/cpp/generator/primitive/Double.cpp (100%) rename source/RobotAPI/libraries/aron/{core => codegeneration}/codegenerator/codewriter/cpp/generator/primitive/Double.h (90%) rename source/RobotAPI/libraries/aron/{core => codegeneration}/codegenerator/codewriter/cpp/generator/primitive/Float.cpp (100%) rename source/RobotAPI/libraries/aron/{core => codegeneration}/codegenerator/codewriter/cpp/generator/primitive/Float.h (90%) rename source/RobotAPI/libraries/aron/{core => codegeneration}/codegenerator/codewriter/cpp/generator/primitive/Int.cpp (100%) rename source/RobotAPI/libraries/aron/{core => codegeneration}/codegenerator/codewriter/cpp/generator/primitive/Int.h (90%) rename source/RobotAPI/libraries/aron/{core => codegeneration}/codegenerator/codewriter/cpp/generator/primitive/Long.cpp (100%) rename source/RobotAPI/libraries/aron/{core => codegeneration}/codegenerator/codewriter/cpp/generator/primitive/Long.h (90%) rename source/RobotAPI/libraries/aron/{core => codegeneration}/codegenerator/codewriter/cpp/generator/primitive/String.cpp (100%) rename source/RobotAPI/libraries/aron/{core => codegeneration}/codegenerator/codewriter/cpp/generator/primitive/String.h (90%) rename source/RobotAPI/libraries/aron/{core => codegeneration}/codegenerator/codewriter/cpp/generator/toplevel/All.h (100%) rename source/RobotAPI/libraries/aron/{core => codegeneration}/codegenerator/codewriter/cpp/generator/toplevel/IntEnumClass.cpp (99%) rename source/RobotAPI/libraries/aron/{core => codegeneration}/codegenerator/codewriter/cpp/generator/toplevel/IntEnumClass.h (88%) rename source/RobotAPI/libraries/aron/{core => codegeneration}/codegenerator/codewriter/cpp/generator/toplevel/ObjectClass.cpp (98%) rename source/RobotAPI/libraries/aron/{core => codegeneration}/codegenerator/codewriter/cpp/generator/toplevel/ObjectClass.h (82%) rename source/RobotAPI/libraries/aron/{core => codegeneration}/codegenerator/helper/ReaderInfo.h (100%) rename source/RobotAPI/libraries/aron/{core => codegeneration}/codegenerator/helper/WriterInfo.h (100%) create mode 100644 source/RobotAPI/libraries/aron/codegeneration/test/CMakeLists.txt rename source/RobotAPI/libraries/aron/{core => codegeneration}/test/aron/AnyTest.xml (100%) rename source/RobotAPI/libraries/aron/{core => codegeneration}/test/aron/BaseClassTest.xml (100%) rename source/RobotAPI/libraries/aron/{core => codegeneration}/test/aron/DerivedClassTest.xml (82%) rename source/RobotAPI/libraries/aron/{core => codegeneration}/test/aron/DictTest.xml (100%) create mode 100644 source/RobotAPI/libraries/aron/codegeneration/test/aron/DtoTest.xml rename source/RobotAPI/libraries/aron/{core => codegeneration}/test/aron/EnumTest.xml (100%) rename source/RobotAPI/libraries/aron/{core => codegeneration}/test/aron/HumanPoseTest.xml (100%) rename source/RobotAPI/libraries/aron/{core => codegeneration}/test/aron/IKResult.xml (100%) rename source/RobotAPI/libraries/aron/{core => codegeneration}/test/aron/ImageTest.xml (100%) rename source/RobotAPI/libraries/aron/{core => codegeneration}/test/aron/ListTest.xml (100%) rename source/RobotAPI/libraries/aron/{core => codegeneration}/test/aron/MatrixTest.xml (100%) rename source/RobotAPI/libraries/aron/{core => codegeneration}/test/aron/NaturalIKTest.xml (100%) rename source/RobotAPI/libraries/aron/{core => codegeneration}/test/aron/ObjectTest.xml (100%) rename source/RobotAPI/libraries/aron/{core => codegeneration}/test/aron/OptionalTest.xml (100%) rename source/RobotAPI/libraries/aron/{core => codegeneration}/test/aron/OrientationTest.xml (100%) rename source/RobotAPI/libraries/aron/{core => codegeneration}/test/aron/PointCloudTest.xml (100%) rename source/RobotAPI/libraries/aron/{core => codegeneration}/test/aron/PoseTest.xml (100%) rename source/RobotAPI/libraries/aron/{core => codegeneration}/test/aron/PositionTest.xml (100%) rename source/RobotAPI/libraries/aron/{core => codegeneration}/test/aron/PrimitiveTest.xml (89%) rename source/RobotAPI/libraries/aron/{core => codegeneration}/test/aron/QuaternionTest.xml (100%) rename source/RobotAPI/libraries/aron/{core => codegeneration}/test/aron/TemplateTest.xml (100%) rename source/RobotAPI/libraries/aron/{core => codegeneration}/test/aronCodeGenerationTest.cpp (88%) rename source/RobotAPI/libraries/aron/{core => codegeneration}/test/aronExtendsTest.cpp (93%) rename source/RobotAPI/libraries/aron/{core => codegeneration}/test/aronNavigateTest.cpp (95%) rename source/RobotAPI/libraries/aron/{core => codegeneration}/test/aronOperatorTest.cpp (100%) rename source/RobotAPI/libraries/aron/{core => codegeneration}/test/aronRandomizedTest.cpp (100%) rename source/RobotAPI/libraries/aron/{core => codegeneration}/typereader/Reader.h (89%) rename source/RobotAPI/libraries/aron/{core => codegeneration}/typereader/helper/GenerateInfo.h (100%) rename source/RobotAPI/libraries/aron/{core => codegeneration}/typereader/helper/GenerateIntEnumInfo.h (100%) rename source/RobotAPI/libraries/aron/{core => codegeneration}/typereader/helper/GenerateTypeInfo.h (100%) rename source/RobotAPI/libraries/aron/{core => codegeneration}/typereader/xml/Data.cpp (98%) rename source/RobotAPI/libraries/aron/{core => codegeneration}/typereader/xml/Data.h (92%) rename source/RobotAPI/libraries/aron/{core => codegeneration}/typereader/xml/Factory.cpp (76%) rename source/RobotAPI/libraries/aron/{core => codegeneration}/typereader/xml/Factory.h (94%) rename source/RobotAPI/libraries/aron/{core => codegeneration}/typereader/xml/Reader.cpp (97%) rename source/RobotAPI/libraries/aron/{core => codegeneration}/typereader/xml/Reader.h (94%) delete mode 100644 source/RobotAPI/libraries/aron/codegenerationhelper/AronCodeGenerator.cpp delete mode 100644 source/RobotAPI/libraries/aron/codegenerationhelper/AronCodeGenerator.h delete mode 100644 source/RobotAPI/libraries/aron/codegenerationhelper/CMakeLists.txt create mode 100644 source/RobotAPI/libraries/aron/core/aron_conversions.cpp create mode 100644 source/RobotAPI/libraries/aron/core/aron_conversions.h delete mode 100644 source/RobotAPI/libraries/aron/core/codegenerator/codewriter/cpp/generator/Factory.cpp delete mode 100644 source/RobotAPI/libraries/aron/core/codegenerator/codewriter/cpp/generator/container/Object.cpp delete mode 100644 source/RobotAPI/libraries/aron/core/codegenerator/codewriter/cpp/generator/detail/AnyGenerator.h delete mode 100644 source/RobotAPI/libraries/aron/core/codegenerator/codewriter/cpp/generator/detail/DtoGenerator.cpp delete mode 100644 source/RobotAPI/libraries/aron/core/codegenerator/codewriter/cpp/generator/dto/All.h delete mode 100644 source/RobotAPI/libraries/aron/core/codegenerator/codewriter/cpp/generator/dto/DateTime.cpp delete mode 100644 source/RobotAPI/libraries/aron/core/codegenerator/codewriter/cpp/generator/dto/DateTime.h delete mode 100644 source/RobotAPI/libraries/aron/core/legacy/DataVisitor.cpp delete mode 100644 source/RobotAPI/libraries/aron/core/legacy/DataVisitor.h delete mode 100644 source/RobotAPI/libraries/aron/core/legacy/Randomizer.h delete mode 100644 source/RobotAPI/libraries/aron/core/legacy/TypedDataVisitor.cpp delete mode 100644 source/RobotAPI/libraries/aron/core/legacy/TypedDataVisitor.h delete mode 100644 source/RobotAPI/libraries/aron/core/test/Randomizer.cpp delete mode 100644 source/RobotAPI/libraries/aron/core/test/Randomizer.h delete mode 100644 source/RobotAPI/libraries/aron/core/type/variant/dto/All.h delete mode 100644 source/RobotAPI/libraries/aron/core/type/variant/dto/DateTime.cpp delete mode 100644 source/RobotAPI/libraries/aron/core/type/variant/dto/DateTime.h diff --git a/source/RobotAPI/applications/AronCodeGenerator/CMakeLists.txt b/source/RobotAPI/applications/AronCodeGenerator/CMakeLists.txt index bc1a0f51a..c25c4215e 100644 --- a/source/RobotAPI/applications/AronCodeGenerator/CMakeLists.txt +++ b/source/RobotAPI/applications/AronCodeGenerator/CMakeLists.txt @@ -1,5 +1,5 @@ armarx_component_set_name("AronCodeGeneratorApp") -set(COMPONENT_LIBS ArmarXCore aron) +set(COMPONENT_LIBS ArmarXCore aroncodegenerator) set(SOURCES main.cpp diff --git a/source/RobotAPI/applications/AronCodeGenerator/main.cpp b/source/RobotAPI/applications/AronCodeGenerator/main.cpp index 5da09c7a9..a71ec2996 100644 --- a/source/RobotAPI/applications/AronCodeGenerator/main.cpp +++ b/source/RobotAPI/applications/AronCodeGenerator/main.cpp @@ -39,8 +39,8 @@ #include <ArmarXCore/libraries/cppgen/CppMethod.h> #include <ArmarXCore/libraries/cppgen/CppClass.h> -#include <RobotAPI/libraries/aron/core/typereader/xml/Reader.h> -#include <RobotAPI/libraries/aron/core/codegenerator/codewriter/cpp/Writer.h> +#include <RobotAPI/libraries/aron/codegeneration/typereader/xml/Reader.h> +#include <RobotAPI/libraries/aron/codegeneration/codegenerator/codewriter/cpp/Writer.h> using namespace armarx; using namespace aron; diff --git a/source/RobotAPI/components/skills/SkillProviderExample/SkillProviderExample.cpp b/source/RobotAPI/components/skills/SkillProviderExample/SkillProviderExample.cpp index cbfbc89cc..dc471cdf1 100644 --- a/source/RobotAPI/components/skills/SkillProviderExample/SkillProviderExample.cpp +++ b/source/RobotAPI/components/skills/SkillProviderExample/SkillProviderExample.cpp @@ -19,8 +19,9 @@ namespace armarx::skills::provider armarx::skills::Example::HelloWorldAcceptedType::ToAronType() }) {} - Skill::Status HelloWorldSkill::execute(const aron::data::DictPtr& d, const CallbackT&) + Skill::Status HelloWorldSkill::main(const aron::data::DictPtr& d, const CallbackT&) { + ARMARX_IMPORTANT << "Hi, from the Hello World Skill.\n" << "I received the following data: \n" << aron::converter::AronNlohmannJSONConverter::ConvertToNlohmannJSON(d).dump(2) << "\n" << @@ -37,7 +38,7 @@ namespace armarx::skills::provider nullptr }) {} - Skill::Status ChainingSkill::execute(const aron::data::DictPtr& d, const CallbackT&) + Skill::Status ChainingSkill::main(const aron::data::DictPtr& d, const CallbackT&) { armarx::skills::Example::HelloWorldAcceptedType exec1; armarx::skills::Example::HelloWorldAcceptedType exec2; @@ -72,7 +73,7 @@ namespace armarx::skills::provider nullptr }) {} - Skill::Status TimeoutSkill::execute(const aron::data::DictPtr& d, const CallbackT&) + Skill::Status TimeoutSkill::main(const aron::data::DictPtr& d, const CallbackT&) { int i = 0; while (!timeoutReached) @@ -99,7 +100,7 @@ namespace armarx::skills::provider nullptr }) {} - Skill::Status CallbackSkill::execute(const aron::data::DictPtr& d, const CallbackT& callback) + Skill::Status CallbackSkill::main(const aron::data::DictPtr& d, const CallbackT& callback) { ARMARX_IMPORTANT << "Logging three updates via the callback"; auto up1 = std::make_shared<aron::data::Dict>(); diff --git a/source/RobotAPI/components/skills/SkillProviderExample/SkillProviderExample.h b/source/RobotAPI/components/skills/SkillProviderExample/SkillProviderExample.h index 57853d642..8ed9ffc9e 100644 --- a/source/RobotAPI/components/skills/SkillProviderExample/SkillProviderExample.h +++ b/source/RobotAPI/components/skills/SkillProviderExample/SkillProviderExample.h @@ -36,14 +36,14 @@ namespace armarx::skills::provider { public: HelloWorldSkill(); - Status execute(const aron::data::DictPtr&, const CallbackT&) final; + Status main(const aron::data::DictPtr&, const CallbackT&) final; }; class ChainingSkill : public Skill { public: ChainingSkill(); - Status execute(const aron::data::DictPtr&, const CallbackT&) final; + Status main(const aron::data::DictPtr&, const CallbackT&) final; }; @@ -51,7 +51,7 @@ namespace armarx::skills::provider { public: TimeoutSkill(); - Status execute(const aron::data::DictPtr&, const CallbackT&) final; + Status main(const aron::data::DictPtr&, const CallbackT&) final; }; @@ -59,7 +59,7 @@ namespace armarx::skills::provider { public: CallbackSkill(); - Status execute(const aron::data::DictPtr&, const CallbackT&) final; + Status main(const aron::data::DictPtr&, const CallbackT&) final; }; /** diff --git a/source/RobotAPI/gui-plugins/SkillManagerPlugin/SkillManagerMonitorWidgetController.cpp b/source/RobotAPI/gui-plugins/SkillManagerPlugin/SkillManagerMonitorWidgetController.cpp index c29af8fca..6ad23607b 100644 --- a/source/RobotAPI/gui-plugins/SkillManagerPlugin/SkillManagerMonitorWidgetController.cpp +++ b/source/RobotAPI/gui-plugins/SkillManagerPlugin/SkillManagerMonitorWidgetController.cpp @@ -159,7 +159,7 @@ namespace armarx return; // remove non-existing ones - auto managerSkills = manager->getSkillProviders(); + auto managerSkills = manager->getSkillDescriptions(); std::vector<std::string> removedProviders; for (auto it = skills.begin(); it != skills.end();) { @@ -178,16 +178,11 @@ namespace armarx // add new ones std::vector<std::string> newProviders; - for (const auto& [providerName, provider] : managerSkills) + for (const auto& [providerName, providerSkills] : managerSkills) { if (skills.find(providerName) == skills.end()) { - SkillProviderData providerData; - providerData.providerName = providerName; - providerData.skillDescriptions = provider->getSkills(); - providerData.skillProviderPrx = provider; - skills.insert(std::make_pair(providerName, providerData)); - + skills.insert(std::make_pair(providerName, providerSkills)); newProviders.push_back(providerName); } } @@ -208,13 +203,13 @@ namespace armarx } // add new providers - for (const auto& [providerName, provider] : skills) + for (const auto& [providerName, providerSkills] : skills) { if (auto it = std::find(newProviders.begin(), newProviders.end(), providerName); it != newProviders.end()) { auto item = new QTreeWidgetItem(widget.treeWidgetSkills); item->setText(0, QString::fromStdString(providerName)); - for (const auto& [name, sk] : provider.skillDescriptions) + for (const auto& [name, sk] : providerSkills) { auto itsk = new QTreeWidgetItem(item); item->addChild(itsk); @@ -224,21 +219,24 @@ namespace armarx } // update status + auto managerStatuses = manager->getSkillExecutionStatuses(); for (int i = 0; i < widget.treeWidgetSkills->topLevelItemCount(); ++i) { try { QTreeWidgetItem* item = widget.treeWidgetSkills->topLevelItem(i); auto providerName = item->text(0).toStdString(); + + auto allStatusesForProvider = managerStatuses.at(providerName); + for (int j = 0; j < item->childCount(); ++j) { QTreeWidgetItem* skillItem = item->child(j); auto skillName = skillItem->text(0).toStdString(); - auto& providerPrx = skills.at(providerName).skillProviderPrx; - auto statusUpdate = providerPrx->getSkillExecutionStatus(skillName); + auto statusForSkill = allStatusesForProvider.at(skillName); - skillItem->setText(2, QString::fromStdString(ExecutionStatus2String.at(statusUpdate.header.status))); + skillItem->setText(2, QString::fromStdString(ExecutionStatus2String.at(statusForSkill.header.status))); } } catch (const std::exception& e) @@ -257,8 +255,8 @@ namespace armarx return; } - const auto& prv = skills.at(selectedSkill.providerName); - if (!prv.skillDescriptions.count(selectedSkill.skillName)) + const auto& skillDescriptions = skills.at(selectedSkill.providerName); + if (!skillDescriptions.count(selectedSkill.skillName)) { return; } @@ -273,7 +271,7 @@ namespace armarx ARMARX_INFO << "Executing skill from GUI: " << selectedSkill.providerName << "/" << selectedSkill.skillName; // Note that we execute the skill in a seperate thread so that the GUI thread does not freeze. //executions.emplace_back([&](){ manager->executeSkill(exInfo); }); - manager->executeSkill(exInfo); + manager->begin_executeSkill(exInfo); } void SkillManagerMonitorWidgetController::stopSkill() @@ -283,8 +281,8 @@ namespace armarx return; } - const auto& prv = skills.at(selectedSkill.providerName); - if (!prv.skillDescriptions.count(selectedSkill.skillName)) + const auto& skillDescriptions = skills.at(selectedSkill.providerName); + if (!skillDescriptions.count(selectedSkill.skillName)) { return; } @@ -330,7 +328,7 @@ namespace armarx aronTreeWidgetController = nullptr; skillsArgumentsTreeWidgetItem = nullptr; - auto skillDesc = skills.at(selectedSkill.providerName).skillDescriptions.at(selectedSkill.skillName); + auto skillDesc = skills.at(selectedSkill.providerName).at(selectedSkill.skillName); { auto it = new QTreeWidgetItem(widget.treeWidgetSkillDetails, diff --git a/source/RobotAPI/gui-plugins/SkillManagerPlugin/SkillManagerMonitorWidgetController.h b/source/RobotAPI/gui-plugins/SkillManagerPlugin/SkillManagerMonitorWidgetController.h index debeaedff..00e15a756 100644 --- a/source/RobotAPI/gui-plugins/SkillManagerPlugin/SkillManagerMonitorWidgetController.h +++ b/source/RobotAPI/gui-plugins/SkillManagerPlugin/SkillManagerMonitorWidgetController.h @@ -108,15 +108,8 @@ namespace armarx std::string skillName; }; - struct SkillProviderData - { - std::string providerName; - skills::provider::dto::SkillDescriptionMap skillDescriptions; - skills::provider::dti::SkillProviderInterfacePrx skillProviderPrx; - }; - - // Data taken from observer - std::map<std::string, SkillProviderData> skills = {}; + // Data taken from observer (snapshot of it) + skills::manager::dto::SkillDescriptionMapMap skills = {}; // User Input SelectedSkill selectedSkill; diff --git a/source/RobotAPI/gui-plugins/SkillManagerPlugin/aronTreeWidget/visitors/AronTreeWidgetConverter.cpp b/source/RobotAPI/gui-plugins/SkillManagerPlugin/aronTreeWidget/visitors/AronTreeWidgetConverter.cpp index 149fa1988..04fab49b6 100644 --- a/source/RobotAPI/gui-plugins/SkillManagerPlugin/aronTreeWidget/visitors/AronTreeWidgetConverter.cpp +++ b/source/RobotAPI/gui-plugins/SkillManagerPlugin/aronTreeWidget/visitors/AronTreeWidgetConverter.cpp @@ -217,13 +217,6 @@ namespace armarx createdAronString->fromString(str); } - void - AronTreeWidgetConverterVisitor::visitAronVariant(const aron::type::DateTimePtr& i) - { - auto l = std::make_shared<aron::type::Long>(); - visitLong(l); - } - void AronTreeWidgetConverterVisitor::visitUnknown(Input&) { ARMARX_WARNING_S << "Received an unknown type when trying to convert a skill argument type to an aron data object."; diff --git a/source/RobotAPI/gui-plugins/SkillManagerPlugin/aronTreeWidget/visitors/AronTreeWidgetConverter.h b/source/RobotAPI/gui-plugins/SkillManagerPlugin/aronTreeWidget/visitors/AronTreeWidgetConverter.h index e7cdcc999..a7d071906 100644 --- a/source/RobotAPI/gui-plugins/SkillManagerPlugin/aronTreeWidget/visitors/AronTreeWidgetConverter.h +++ b/source/RobotAPI/gui-plugins/SkillManagerPlugin/aronTreeWidget/visitors/AronTreeWidgetConverter.h @@ -70,7 +70,6 @@ namespace armarx void visitAronVariant(const aron::type::DoublePtr&) override; void visitAronVariant(const aron::type::BoolPtr&) override; void visitAronVariant(const aron::type::StringPtr&) override; - void visitAronVariant(const aron::type::DateTimePtr&) override; void visitUnknown(Input&) override; }; } diff --git a/source/RobotAPI/gui-plugins/SkillManagerPlugin/aronTreeWidget/visitors/AronTreeWidgetCreator.cpp b/source/RobotAPI/gui-plugins/SkillManagerPlugin/aronTreeWidget/visitors/AronTreeWidgetCreator.cpp index 7c6b0ceaf..5e8cab9ee 100644 --- a/source/RobotAPI/gui-plugins/SkillManagerPlugin/aronTreeWidget/visitors/AronTreeWidgetCreator.cpp +++ b/source/RobotAPI/gui-plugins/SkillManagerPlugin/aronTreeWidget/visitors/AronTreeWidgetCreator.cpp @@ -121,9 +121,6 @@ namespace armarx void AronTreeWidgetCreatorVisitor::visitAronVariant(const aron::type::StringPtr& i) { createSimpleTreeViewWidget(i, ""); } - void - AronTreeWidgetCreatorVisitor::visitAronVariant(const aron::type::DateTimePtr& i) - { createSimpleTreeViewWidget(i, "0"); } void AronTreeWidgetCreatorVisitor::visitUnknown(Input&) { diff --git a/source/RobotAPI/gui-plugins/SkillManagerPlugin/aronTreeWidget/visitors/AronTreeWidgetCreator.h b/source/RobotAPI/gui-plugins/SkillManagerPlugin/aronTreeWidget/visitors/AronTreeWidgetCreator.h index eaaf07bd4..5a696d52c 100644 --- a/source/RobotAPI/gui-plugins/SkillManagerPlugin/aronTreeWidget/visitors/AronTreeWidgetCreator.h +++ b/source/RobotAPI/gui-plugins/SkillManagerPlugin/aronTreeWidget/visitors/AronTreeWidgetCreator.h @@ -68,7 +68,6 @@ namespace armarx void visitAronVariant(const aron::type::DoublePtr& i) override; void visitAronVariant(const aron::type::BoolPtr& i) override; void visitAronVariant(const aron::type::StringPtr& i) override; - void visitAronVariant(const aron::type::DateTimePtr& i) override; void visitUnknown(Input&) override; }; } diff --git a/source/RobotAPI/gui-plugins/SkillManagerPlugin/aronTreeWidget/visitors/AronTreeWidgetModalCreator.cpp b/source/RobotAPI/gui-plugins/SkillManagerPlugin/aronTreeWidget/visitors/AronTreeWidgetModalCreator.cpp index c0db71919..07c0eee7a 100644 --- a/source/RobotAPI/gui-plugins/SkillManagerPlugin/aronTreeWidget/visitors/AronTreeWidgetModalCreator.cpp +++ b/source/RobotAPI/gui-plugins/SkillManagerPlugin/aronTreeWidget/visitors/AronTreeWidgetModalCreator.cpp @@ -118,12 +118,6 @@ namespace armarx createdModal = std::make_shared<AronTreeWidgetTextInputModalController>(label, item, parent); } - void - AronTreeWidgetModalCreatorVisitor::visitAronVariant(const aron::type::DateTimePtr& i) - { - createdModal = std::make_shared<AronTreeWidgetTextInputModalController>(label, item, parent); - } - void AronTreeWidgetModalCreatorVisitor::visitUnknown(Input&) { ARMARX_WARNING_S << "Received an unknown type when trying to create a tree view widget modal for a skill argument type."; diff --git a/source/RobotAPI/gui-plugins/SkillManagerPlugin/aronTreeWidget/visitors/AronTreeWidgetModalCreator.h b/source/RobotAPI/gui-plugins/SkillManagerPlugin/aronTreeWidget/visitors/AronTreeWidgetModalCreator.h index d2cd06df1..26764e6d2 100644 --- a/source/RobotAPI/gui-plugins/SkillManagerPlugin/aronTreeWidget/visitors/AronTreeWidgetModalCreator.h +++ b/source/RobotAPI/gui-plugins/SkillManagerPlugin/aronTreeWidget/visitors/AronTreeWidgetModalCreator.h @@ -76,7 +76,6 @@ namespace armarx void visitAronVariant(const aron::type::DoublePtr& i) override; void visitAronVariant(const aron::type::BoolPtr& i) override; void visitAronVariant(const aron::type::StringPtr& i) override; - void visitAronVariant(const aron::type::DateTimePtr& i) override; void visitUnknown(Input&) override; }; } diff --git a/source/RobotAPI/interface/aron/Aron.ice b/source/RobotAPI/interface/aron/Aron.ice index 8667b1aaf..c766750c2 100644 --- a/source/RobotAPI/interface/aron/Aron.ice +++ b/source/RobotAPI/interface/aron/Aron.ice @@ -28,25 +28,25 @@ module armarx { enum Maybe { - eNone, - eOptional, - eRawPointer, - eUniquePointer, - eSharedPointer + NONE, + OPTIONAL, + RAW_PTR, + UNIQUE_PTR, + SHARED_PTR }; module ndarray { enum ElementType { - uint8, - int8, - uint16, - int16, - uint32, - int32, - float32, - float64 + UINT8, + INT8, + UINT16, + INT16, + UINT32, + INT32, + FLOAT32, + FLOAT64 }; }; @@ -54,8 +54,8 @@ module armarx { enum PixelType { - rgb24, - depth32 + RGB24, + DEPTH32 }; }; @@ -63,13 +63,13 @@ module armarx { enum VoxelType { - PointXYZ, - PointXYZI, - PointXYZL, - PointXYZRGB, - PointXYZRGBL, - PointXYZRGBA, - PointXYZHSV + POINT_XYZ, + POINT_XYZI, + POINT_XYZL, + POINT_XYZRGB, + POINT_XYZRGBL, + POINT_XYZRGBA, + POINT_XYZHSV }; }; @@ -77,11 +77,11 @@ module armarx { enum ElementType { - int16, - int32, - int64, - float32, - float64 + INT16, + INT32, + INT64, + FLOAT32, + FLOAT64 }; }; @@ -89,8 +89,8 @@ module armarx { enum ElementType { - float32, - float64 + FLOAT32, + FLOAT64 }; }; @@ -98,7 +98,7 @@ module armarx { class GenericType { string VERSION = ARON_VERSION; - Maybe maybe = Maybe::eNone; + Maybe maybe = Maybe::NONE; } sequence<GenericType> GenericTypeSeq; dictionary<string, GenericType> GenericTypeDict; @@ -122,6 +122,9 @@ module armarx //class FloatEnum extends GenericType { string enumName; StringFloatDict acceptedValues; } //class StringEnum extends GenericType { string enumName; StringStringDict acceptedValues; } + /* ***** Any Types ***** */ + class AnyObject extends GenericType { }; + /* ***** Primitive Types ***** */ class AronInt extends GenericType { }; class AronLong extends GenericType { }; @@ -129,13 +132,6 @@ module armarx class AronFloat extends GenericType { }; class AronString extends GenericType { }; class AronBool extends GenericType { }; - - /* ***** DTO Types ***** */ - class AronDateTime extends GenericType { }; - class AronDuration extends GenericType { }; - - /* ***** Any Types ***** */ - class AnyObject extends GenericType {}; }; }; diff --git a/source/RobotAPI/interface/skills/SkillManagerInterface.ice b/source/RobotAPI/interface/skills/SkillManagerInterface.ice index e35bb3e34..28712a953 100644 --- a/source/RobotAPI/interface/skills/SkillManagerInterface.ice +++ b/source/RobotAPI/interface/skills/SkillManagerInterface.ice @@ -40,7 +40,6 @@ module armarx string skillName; aron::data::dto::Dict params; }; - struct ProviderInfo { string providerName; @@ -48,18 +47,26 @@ module armarx provider::dto::SkillDescriptionMap providedSkills; }; + // Provider data types dictionary<string, provider::dto::SkillDescriptionMap> SkillDescriptionMapMap; + dictionary<string, provider::dto::SkillStatusUpdateMap> SkillStatusUpdateMapMap; } module dti { interface SkillManagerInterface extends callback::dti::SkillProviderCallbackInterface { + // There is by design no method to access the providerPrx. You should only communicate with the manager + void addProvider(dto::ProviderInfo providerInfo); void removeProvider(string providerName); + dto::SkillDescriptionMapMap getSkillDescriptions(); + dto::SkillStatusUpdateMapMap getSkillExecutionStatuses(); + void executeSkill(dto::SkillExecutionRequest skillExecutionInfo); void abortSkill(string providerName, string skillName); + }; } } diff --git a/source/RobotAPI/libraries/armem/server/ltm/base/converter/image/Converter.h b/source/RobotAPI/libraries/armem/server/ltm/base/converter/image/Converter.h index a2b2df045..8cb070f09 100644 --- a/source/RobotAPI/libraries/armem/server/ltm/base/converter/image/Converter.h +++ b/source/RobotAPI/libraries/armem/server/ltm/base/converter/image/Converter.h @@ -15,7 +15,7 @@ namespace armarx::armem::server::ltm { public: ImageConverter(const ConverterType t, const std::string& id, const std::string& s): - Converter(t, id, s, aron::type::Descriptor::eImage) + Converter(t, id, s, aron::type::Descriptor::IMAGE) {} virtual ~ImageConverter() = default; diff --git a/source/RobotAPI/libraries/armem/server/ltm/base/converter/object/Converter.h b/source/RobotAPI/libraries/armem/server/ltm/base/converter/object/Converter.h index e5c8e9f80..35f1a9d96 100644 --- a/source/RobotAPI/libraries/armem/server/ltm/base/converter/object/Converter.h +++ b/source/RobotAPI/libraries/armem/server/ltm/base/converter/object/Converter.h @@ -15,7 +15,7 @@ namespace armarx::armem::server::ltm { public: ObjectConverter(const ConverterType t, const std::string& id, const std::string& s): - Converter(t, id, s, aron::type::Descriptor::eObject) + Converter(t, id, s, aron::type::Descriptor::OBJECT) {} virtual ~ObjectConverter() = default; diff --git a/source/RobotAPI/libraries/armem/server/ltm/base/extractor/imageExtractor/DepthImageExtractor.cpp b/source/RobotAPI/libraries/armem/server/ltm/base/extractor/imageExtractor/DepthImageExtractor.cpp index 4640cca47..e0b4c1c6a 100644 --- a/source/RobotAPI/libraries/armem/server/ltm/base/extractor/imageExtractor/DepthImageExtractor.cpp +++ b/source/RobotAPI/libraries/armem/server/ltm/base/extractor/imageExtractor/DepthImageExtractor.cpp @@ -10,7 +10,7 @@ namespace armarx::armem::server::ltm::extractor auto dict = aron::data::Dict::DynamicCastAndCheck(data); for (const auto& [key, child] : dict->getElements()) { - if (child && child->getDescriptor() == aron::data::Descriptor::eNDArray) + if (child && child->getDescriptor() == aron::data::Descriptor::NDARRAY) { auto ndarray = aron::data::NDArray::DynamicCastAndCheck(child); auto shape = ndarray->getShape(); diff --git a/source/RobotAPI/libraries/armem/server/ltm/base/extractor/imageExtractor/DepthImageExtractor.h b/source/RobotAPI/libraries/armem/server/ltm/base/extractor/imageExtractor/DepthImageExtractor.h index 09b305e3c..f7857c267 100644 --- a/source/RobotAPI/libraries/armem/server/ltm/base/extractor/imageExtractor/DepthImageExtractor.h +++ b/source/RobotAPI/libraries/armem/server/ltm/base/extractor/imageExtractor/DepthImageExtractor.h @@ -20,7 +20,7 @@ namespace armarx::armem::server::ltm::extractor { public: DepthImageExtractor() : - Extractor(aron::type::Descriptor::eImage, "depthimage") + Extractor(aron::type::Descriptor::IMAGE, "depthimage") { enabled = true; }; diff --git a/source/RobotAPI/libraries/armem/server/ltm/base/extractor/imageExtractor/ImageExtractor.cpp b/source/RobotAPI/libraries/armem/server/ltm/base/extractor/imageExtractor/ImageExtractor.cpp index c646a4f47..767de1c5c 100644 --- a/source/RobotAPI/libraries/armem/server/ltm/base/extractor/imageExtractor/ImageExtractor.cpp +++ b/source/RobotAPI/libraries/armem/server/ltm/base/extractor/imageExtractor/ImageExtractor.cpp @@ -10,7 +10,7 @@ namespace armarx::armem::server::ltm::extractor auto dict = aron::data::Dict::DynamicCastAndCheck(data); for (const auto& [key, child] : dict->getElements()) { - if (child && child->getDescriptor() == aron::data::Descriptor::eNDArray) + if (child && child->getDescriptor() == aron::data::Descriptor::NDARRAY) { auto ndarray = aron::data::NDArray::DynamicCastAndCheck(child); auto shape = ndarray->getShape(); diff --git a/source/RobotAPI/libraries/armem/server/ltm/base/extractor/imageExtractor/ImageExtractor.h b/source/RobotAPI/libraries/armem/server/ltm/base/extractor/imageExtractor/ImageExtractor.h index be9c80ba7..c8ef9669d 100644 --- a/source/RobotAPI/libraries/armem/server/ltm/base/extractor/imageExtractor/ImageExtractor.h +++ b/source/RobotAPI/libraries/armem/server/ltm/base/extractor/imageExtractor/ImageExtractor.h @@ -20,7 +20,7 @@ namespace armarx::armem::server::ltm::extractor { public: ImageExtractor() : - Extractor(aron::type::Descriptor::eImage, "image") + Extractor(aron::type::Descriptor::IMAGE, "image") { enabled = true; }; diff --git a/source/RobotAPI/libraries/armem/util/util.h b/source/RobotAPI/libraries/armem/util/util.h index 7ffdfbfdc..d6f9c58a2 100644 --- a/source/RobotAPI/libraries/armem/util/util.h +++ b/source/RobotAPI/libraries/armem/util/util.h @@ -28,7 +28,7 @@ #include <RobotAPI/libraries/armem/client/MemoryNameSystem.h> #include <RobotAPI/libraries/armem/core/wm/memory_definitions.h> -#include <RobotAPI/libraries/aron/core/codegenerator/codewriter/cpp/AronGeneratedClass.h> +#include <RobotAPI/libraries/aron/codegeneration/codegenerator/codewriter/cpp/AronGeneratedClass.h> namespace armarx::armem @@ -55,7 +55,7 @@ namespace armarx::armem #if 0 // item.data() is by definition a DictNavigator - if (item.data()->getDescriptor() != aron::data::Descriptor::eDict) + if (item.data()->getDescriptor() != aron::data::Descriptor::DICT) { return std::nullopt; } diff --git a/source/RobotAPI/libraries/armem_gui/instance/InstanceView.cpp b/source/RobotAPI/libraries/armem_gui/instance/InstanceView.cpp index 61918cb20..5f6833487 100644 --- a/source/RobotAPI/libraries/armem_gui/instance/InstanceView.cpp +++ b/source/RobotAPI/libraries/armem_gui/instance/InstanceView.cpp @@ -282,7 +282,7 @@ namespace armarx::armem::gui::instance aron::type::Descriptor type = static_cast<aron::type::Descriptor>(item->data(int(Columns::TYPE), Qt::UserRole).toInt()); switch (type) { - case aron::type::Descriptor::eImage: + case aron::type::Descriptor::IMAGE: { if (const std::optional<aron::Path> path = getElementPath(item)) { @@ -699,7 +699,7 @@ namespace armarx::armem::gui::instance // pixelType = aron::type::Image::pixelTypeFromName(imageData->getType()); // For now we assume it comes from c++ where '5' means CV_32FC1 (=5) - pixelType = (imageData->getType() == "5" ? PixelType::depth32 : PixelType::rgb24); + pixelType = (imageData->getType() == "5" ? PixelType::DEPTH32 : PixelType::RGB24); } catch (const aron::error::AronException&) { @@ -711,12 +711,12 @@ namespace armarx::armem::gui::instance { switch (pixelType.value()) { - case PixelType::rgb24: + case PixelType::RGB24: ARMARX_CHECK_EQUAL(shape.at(2), 3) << "Expected Rgb24 image to have 3 bytes per pixel."; image = QImage(imageData->getData(), cols, rows, QImage::Format::Format_RGB888); break; - case PixelType::depth32: + case PixelType::DEPTH32: image = imageView->convertDepth32ToRGB32(*imageData); clearLimitsHistory = false; break; diff --git a/source/RobotAPI/libraries/armem_gui/instance/display_visitors/TypedDataDisplayVisitor.cpp b/source/RobotAPI/libraries/armem_gui/instance/display_visitors/TypedDataDisplayVisitor.cpp index 7898b78f6..6b7e2a77a 100644 --- a/source/RobotAPI/libraries/armem_gui/instance/display_visitors/TypedDataDisplayVisitor.cpp +++ b/source/RobotAPI/libraries/armem_gui/instance/display_visitors/TypedDataDisplayVisitor.cpp @@ -84,12 +84,12 @@ namespace armarx::aron value << DataDisplayVisitor::getValue(data); } - void TypedDataDisplayVisitor::visitDateTime(const data::VariantPtr& data, const type::VariantPtr& type) + /*void TypedDataDisplayVisitor::visitDateTime(const data::VariantPtr& data, const type::VariantPtr& type) { auto l = data::Long::DynamicCastAndCheck(data); armem::Time time { armem::Duration::MicroSeconds(l->getValue()) }; value << armem::toDateTimeMilliSeconds(time); - } + }*/ template <typename ScalarT> diff --git a/source/RobotAPI/libraries/armem_gui/instance/display_visitors/TypedDataDisplayVisitor.h b/source/RobotAPI/libraries/armem_gui/instance/display_visitors/TypedDataDisplayVisitor.h index 699e54996..9d0193e37 100644 --- a/source/RobotAPI/libraries/armem_gui/instance/display_visitors/TypedDataDisplayVisitor.h +++ b/source/RobotAPI/libraries/armem_gui/instance/display_visitors/TypedDataDisplayVisitor.h @@ -39,7 +39,6 @@ namespace armarx::aron void visitInt(const data::VariantPtr& data, const type::VariantPtr& type) override; void visitLong(const data::VariantPtr& data, const type::VariantPtr& type) override; void visitString(const data::VariantPtr& data, const type::VariantPtr& type) override; - void visitDateTime(const data::VariantPtr& data, const type::VariantPtr& type) override; void visitMatrix(const data::VariantPtr& data, const type::VariantPtr& type) override; diff --git a/source/RobotAPI/libraries/armem_gui/instance/tree_builders/TypedDataTreeBuilder.cpp b/source/RobotAPI/libraries/armem_gui/instance/tree_builders/TypedDataTreeBuilder.cpp index 70edd5a51..baf2fc6b4 100644 --- a/source/RobotAPI/libraries/armem_gui/instance/tree_builders/TypedDataTreeBuilder.cpp +++ b/source/RobotAPI/libraries/armem_gui/instance/tree_builders/TypedDataTreeBuilder.cpp @@ -185,7 +185,7 @@ namespace armarx::armem::gui::instance std::string typeName = instance::sanitizeTypeName(type->getFullName()); switch (type->getMaybe()) { - case aron::type::Maybe::eOptional: + case aron::type::Maybe::OPTIONAL: typeName = "Optional[" + typeName + "]"; break; default: diff --git a/source/RobotAPI/libraries/armem_gui/instance/tree_visitors/TreeTypedDataVisitor.cpp b/source/RobotAPI/libraries/armem_gui/instance/tree_visitors/TreeTypedDataVisitor.cpp index ef1dbf9e0..c37bff2f8 100644 --- a/source/RobotAPI/libraries/armem_gui/instance/tree_visitors/TreeTypedDataVisitor.cpp +++ b/source/RobotAPI/libraries/armem_gui/instance/tree_visitors/TreeTypedDataVisitor.cpp @@ -14,13 +14,13 @@ namespace armarx::armem::gui::instance { - void TreeTypedDataVisitor::streamValueText(const aron::data::Long& data, const aron::type::DateTime& type, std::stringstream& ss) const + /*void TreeTypedDataVisitor::streamValueText(const aron::data::Long& data, const aron::type::DateTime& type, std::stringstream& ss) const { (void) type; armem::Time time { armem::Duration::MicroSeconds(data.getValue()) }; armem::toDateTimeMilliSeconds(time); ss << armem::toDateTimeMilliSeconds(time); - } + }*/ void TreeTypedDataVisitor::streamValueText(const aron::data::NDArray& data, const aron::type::Matrix& type, std::stringstream& ss) const { diff --git a/source/RobotAPI/libraries/armem_gui/instance/tree_visitors/TreeTypedDataVisitor.h b/source/RobotAPI/libraries/armem_gui/instance/tree_visitors/TreeTypedDataVisitor.h index 465bbd623..8ee94fd6c 100644 --- a/source/RobotAPI/libraries/armem_gui/instance/tree_visitors/TreeTypedDataVisitor.h +++ b/source/RobotAPI/libraries/armem_gui/instance/tree_visitors/TreeTypedDataVisitor.h @@ -139,7 +139,7 @@ namespace armarx::armem::gui::instance auto t = *aron::type::String::DynamicCastAndCheck(type); this->addValueRow(key, d, t); } - void visitDateTime(const aron::data::VariantPtr& data, const aron::type::VariantPtr& type) override + /*void visitDateTime(const aron::data::VariantPtr& data, const aron::type::VariantPtr& type) override { ARMARX_CHECK_NOT_NULL(data); ARMARX_CHECK_NOT_NULL(type); @@ -148,7 +148,7 @@ namespace armarx::armem::gui::instance auto d = *aron::data::Long::DynamicCastAndCheck(data); auto t = *aron::type::DateTime::DynamicCastAndCheck(type); this->addValueRow(key, d, t); - } + }*/ void visitMatrix(const aron::data::VariantPtr& data, const aron::type::VariantPtr& type) override @@ -249,7 +249,7 @@ namespace armarx::armem::gui::instance } using TreeDataVisitorBase::streamValueText; - void streamValueText(const aron::data::Long& data, const aron::type::DateTime& type, std::stringstream& ss) const; + //void streamValueText(const aron::data::Long& data, const aron::type::DateTime& type, std::stringstream& ss) const; void streamValueText(const aron::data::NDArray& data, const aron::type::Matrix& type, std::stringstream& ss) const; void streamPoseText(const aron::data::NDArray& data, const aron::type::Matrix& type, std::stringstream& ss) const; diff --git a/source/RobotAPI/libraries/armem_gui/instance/tree_visitors/TreeTypedJSONConverter.cpp b/source/RobotAPI/libraries/armem_gui/instance/tree_visitors/TreeTypedJSONConverter.cpp index e9bfd3adf..0a6e9e32c 100644 --- a/source/RobotAPI/libraries/armem_gui/instance/tree_visitors/TreeTypedJSONConverter.cpp +++ b/source/RobotAPI/libraries/armem_gui/instance/tree_visitors/TreeTypedJSONConverter.cpp @@ -244,9 +244,9 @@ namespace armarx::armem::gui::instance insertIntoJSON(key, s); } - void - TreeTypedJSONConverter::visitDateTime(DataInput& elementData, TypeInput& /*elementType*/) - { + //void + //TreeTypedJSONConverter::visitDateTime(DataInput& elementData, TypeInput& /*elementType*/) + /*{ const std::string key = elementData->getPath().getLastElement(); int64_t l = *aron::data::Long::DynamicCastAndCheck(elementData); armem::Time time { armem::Duration::MicroSeconds(l) }; @@ -255,7 +255,7 @@ namespace armarx::armem::gui::instance { insertIntoJSON(key + "_hr", armem::toDateTimeMilliSeconds(time)); } - } + }*/ template <typename ElementType> void diff --git a/source/RobotAPI/libraries/armem_gui/instance/tree_visitors/TreeTypedJSONConverter.h b/source/RobotAPI/libraries/armem_gui/instance/tree_visitors/TreeTypedJSONConverter.h index 978701f94..e299f8f64 100644 --- a/source/RobotAPI/libraries/armem_gui/instance/tree_visitors/TreeTypedJSONConverter.h +++ b/source/RobotAPI/libraries/armem_gui/instance/tree_visitors/TreeTypedJSONConverter.h @@ -42,7 +42,6 @@ namespace armarx::armem::gui::instance void visitDouble(DataInput& elementData, TypeInput& elementType) override; void visitBool(DataInput& elementData, TypeInput& elementType) override; void visitString(DataInput& elementData, TypeInput& elementType) override; - void visitDateTime(DataInput& elementData, TypeInput& elementType) override; private: std::stack<std::pair<std::string, nlohmann::json>> jsonStack; diff --git a/source/RobotAPI/libraries/armem_gui/test/ArMemGuiTest.cpp b/source/RobotAPI/libraries/armem_gui/test/ArMemGuiTest.cpp index af5f91496..627d1a2ea 100644 --- a/source/RobotAPI/libraries/armem_gui/test/ArMemGuiTest.cpp +++ b/source/RobotAPI/libraries/armem_gui/test/ArMemGuiTest.cpp @@ -110,7 +110,7 @@ BOOST_AUTO_TEST_CASE(test_sanitizeTypeName_ndarry) { tn::NDArray type; type.setNumberDimensions(3); //old: { 3, 2, 1}); - type.setElementType(armarx::aron::type::ndarray::float32); + type.setElementType(armarx::aron::type::ndarray::FLOAT32); test_sanitize(type.getFullName(), "NDArray"); } { diff --git a/source/RobotAPI/libraries/armem_objects/server/instance/SegmentAdapter.cpp b/source/RobotAPI/libraries/armem_objects/server/instance/SegmentAdapter.cpp index 7a36b0cbc..2144a7da9 100644 --- a/source/RobotAPI/libraries/armem_objects/server/instance/SegmentAdapter.cpp +++ b/source/RobotAPI/libraries/armem_objects/server/instance/SegmentAdapter.cpp @@ -28,7 +28,7 @@ #include <RobotAPI/libraries/ArmarXObjects/ObjectID.h> #include <RobotAPI/libraries/ArmarXObjects/predictions.h> #include <RobotAPI/libraries/armem_objects/aron/ObjectInstance.aron.generated.h> -#include <RobotAPI/libraries/aron/common/aron_conversions/core.h> +#include <RobotAPI/libraries/aron/core/aron_conversions.h> #include <ArmarXCore/core/ice_conversions/ice_conversions_templates.h> #include <ArmarXCore/core/time/CycleUtil.h> diff --git a/source/RobotAPI/libraries/armem_robot/aron_conversions.cpp b/source/RobotAPI/libraries/armem_robot/aron_conversions.cpp index 4fc3ce642..3bd7b2dfb 100644 --- a/source/RobotAPI/libraries/armem_robot/aron_conversions.cpp +++ b/source/RobotAPI/libraries/armem_robot/aron_conversions.cpp @@ -6,10 +6,6 @@ #include <RobotAPI/libraries/ArmarXObjects/ObjectID.h> #include <RobotAPI/libraries/ArmarXObjects/aron_conversions.h> -#include <RobotAPI/libraries/aron/common/aron_conversions/core.h> -#include <RobotAPI/libraries/aron/common/aron_conversions/stl.h> -#include <RobotAPI/libraries/aron/common/aron_conversions/armarx.h> - namespace armarx::armem::robot { diff --git a/source/RobotAPI/libraries/aron/CMakeLists.txt b/source/RobotAPI/libraries/aron/CMakeLists.txt index c45ff0856..ce4f7bc99 100644 --- a/source/RobotAPI/libraries/aron/CMakeLists.txt +++ b/source/RobotAPI/libraries/aron/CMakeLists.txt @@ -1,4 +1,4 @@ add_subdirectory(core) add_subdirectory(converter) -add_subdirectory(codegenerationhelper) +add_subdirectory(codegeneration) add_subdirectory(common) diff --git a/source/RobotAPI/libraries/aron/codegeneration/CMakeLists.txt b/source/RobotAPI/libraries/aron/codegeneration/CMakeLists.txt new file mode 100644 index 000000000..3aed01744 --- /dev/null +++ b/source/RobotAPI/libraries/aron/codegeneration/CMakeLists.txt @@ -0,0 +1,124 @@ +set(LIB_NAME aroncodegenerator) + +armarx_component_set_name("${LIB_NAME}") +armarx_set_target("Library: ${LIB_NAME}") + +find_package(Simox QUIET) +armarx_build_if(Simox_FOUND "Simox not available") + +set(LIBS + ArmarXCoreInterfaces + ArmarXCore + RobotAPIInterfaces + cppgen + aron + SimoxUtility +) + +set(LIB_FILES + typereader/xml/Data.cpp + typereader/xml/Factory.cpp + typereader/xml/Reader.cpp + + codegenerator/codewriter/cpp/Writer.cpp + codegenerator/codewriter/cpp/generator/Generator.cpp + codegenerator/codewriter/cpp/generator/detail/SpecializedGenerator.cpp + codegenerator/codewriter/cpp/generator/detail/ContainerGenerator.cpp + codegenerator/codewriter/cpp/generator/detail/NDArrayGenerator.cpp + codegenerator/codewriter/cpp/generator/detail/PrimitiveGenerator.cpp + codegenerator/codewriter/cpp/generator/detail/AnyGenerator.cpp + codegenerator/codewriter/cpp/generator/toplevel/ObjectClass.cpp + codegenerator/codewriter/cpp/generator/toplevel/IntEnumClass.cpp + codegenerator/codewriter/cpp/generator/container/Dict.cpp + codegenerator/codewriter/cpp/generator/container/List.cpp + codegenerator/codewriter/cpp/generator/container/Object.cpp + codegenerator/codewriter/cpp/generator/container/Tuple.cpp + codegenerator/codewriter/cpp/generator/container/Pair.cpp + codegenerator/codewriter/cpp/generator/ndarray/NDArray.cpp + codegenerator/codewriter/cpp/generator/ndarray/Matrix.cpp + codegenerator/codewriter/cpp/generator/ndarray/Quaternion.cpp + codegenerator/codewriter/cpp/generator/ndarray/Image.cpp + codegenerator/codewriter/cpp/generator/ndarray/PointCloud.cpp + codegenerator/codewriter/cpp/generator/enum/IntEnum.cpp + codegenerator/codewriter/cpp/generator/primitive/Int.cpp + codegenerator/codewriter/cpp/generator/primitive/Long.cpp + codegenerator/codewriter/cpp/generator/primitive/Float.cpp + codegenerator/codewriter/cpp/generator/primitive/Double.cpp + codegenerator/codewriter/cpp/generator/primitive/String.cpp + codegenerator/codewriter/cpp/generator/primitive/Bool.cpp + codegenerator/codewriter/cpp/generator/any/AnyObject.cpp + codegenerator/codewriter/cpp/generator/Factory.cpp +) + +set(LIB_HEADERS + typereader/helper/GenerateInfo.h + typereader/helper/GenerateTypeInfo.h + typereader/helper/GenerateIntEnumInfo.h + + typereader/Reader.h + typereader/xml/Data.h + typereader/xml/Factory.h + typereader/xml/Reader.h + + codegenerator/helper/WriterInfo.h + codegenerator/helper/ReaderInfo.h + + codegenerator/codewriter/CodeWriter.h + codegenerator/codewriter/Factory.h + + codegenerator/codewriter/cpp/AronGeneratedClass.h + codegenerator/codewriter/cpp/Writer.h + codegenerator/codewriter/cpp/generator/Generator.h + codegenerator/codewriter/cpp/generator/detail/SpecializedGenerator.h + codegenerator/codewriter/cpp/generator/detail/ContainerGenerator.h + codegenerator/codewriter/cpp/generator/detail/NDArrayGenerator.h + codegenerator/codewriter/cpp/generator/detail/PrimitiveGenerator.h + codegenerator/codewriter/cpp/generator/detail/AnyGenerator.h + codegenerator/codewriter/cpp/generator/toplevel/ObjectClass.h + codegenerator/codewriter/cpp/generator/toplevel/IntEnumClass.h + codegenerator/codewriter/cpp/generator/toplevel/All.h + codegenerator/codewriter/cpp/generator/container/Dict.h + codegenerator/codewriter/cpp/generator/container/List.h + codegenerator/codewriter/cpp/generator/container/Object.h + codegenerator/codewriter/cpp/generator/container/Tuple.h + codegenerator/codewriter/cpp/generator/container/Pair.h + codegenerator/codewriter/cpp/generator/container/All.h + codegenerator/codewriter/cpp/generator/ndarray/NDArray.h + codegenerator/codewriter/cpp/generator/ndarray/Matrix.h + codegenerator/codewriter/cpp/generator/ndarray/Quaternion.h + codegenerator/codewriter/cpp/generator/ndarray/Image.h + codegenerator/codewriter/cpp/generator/ndarray/PointCloud.h + codegenerator/codewriter/cpp/generator/ndarray/All.h + codegenerator/codewriter/cpp/generator/enum/IntEnum.h + codegenerator/codewriter/cpp/generator/enum/All.h + codegenerator/codewriter/cpp/generator/primitive/Int.h + codegenerator/codewriter/cpp/generator/primitive/Long.h + codegenerator/codewriter/cpp/generator/primitive/Float.h + codegenerator/codewriter/cpp/generator/primitive/Double.h + codegenerator/codewriter/cpp/generator/primitive/String.h + codegenerator/codewriter/cpp/generator/primitive/Bool.h + codegenerator/codewriter/cpp/generator/primitive/All.h + codegenerator/codewriter/cpp/generator/any/AnyObject.h + codegenerator/codewriter/cpp/generator/any/All.h + codegenerator/codewriter/cpp/generator/All.h + codegenerator/codewriter/cpp/generator/Factory.h +) + + +armarx_add_library( + LIB_NAME + "${LIB_NAME}" + SOURCES + "${LIB_FILES}" + HEADERS + "${LIB_HEADERS}" + LIBS + "${LIBS}" +) + +add_library(AronCodegenerator ALIAS "${LIB_NAME}") +add_library(RobotAPI::AronCodegenerator ALIAS "${LIB_NAME}") +add_library(RobotAPI::aroncodegenerator ALIAS "${LIB_NAME}") + +# add unit tests +add_subdirectory(test) diff --git a/source/RobotAPI/libraries/aron/core/codegenerator/codewriter/CodeWriter.h b/source/RobotAPI/libraries/aron/codegeneration/codegenerator/codewriter/CodeWriter.h similarity index 87% rename from source/RobotAPI/libraries/aron/core/codegenerator/codewriter/CodeWriter.h rename to source/RobotAPI/libraries/aron/codegeneration/codegenerator/codewriter/CodeWriter.h index 0bbf6ca52..942d036f3 100644 --- a/source/RobotAPI/libraries/aron/core/codegenerator/codewriter/CodeWriter.h +++ b/source/RobotAPI/libraries/aron/codegeneration/codegenerator/codewriter/CodeWriter.h @@ -35,10 +35,10 @@ #include <RobotAPI/libraries/aron/core/type/variant/All.h> -#include <RobotAPI/libraries/aron/core/codegenerator/helper/WriterInfo.h> -#include <RobotAPI/libraries/aron/core/codegenerator/helper/ReaderInfo.h> -#include <RobotAPI/libraries/aron/core/typereader/helper/GenerateTypeInfo.h> -#include <RobotAPI/libraries/aron/core/typereader/helper/GenerateIntEnumInfo.h> +#include <RobotAPI/libraries/aron/codegeneration/codegenerator/helper/WriterInfo.h> +#include <RobotAPI/libraries/aron/codegeneration/codegenerator/helper/ReaderInfo.h> +#include <RobotAPI/libraries/aron/codegeneration/typereader/helper/GenerateTypeInfo.h> +#include <RobotAPI/libraries/aron/codegeneration/typereader/helper/GenerateIntEnumInfo.h> namespace armarx::aron::codegenerator { diff --git a/source/RobotAPI/libraries/aron/core/codegenerator/codewriter/Factory.h b/source/RobotAPI/libraries/aron/codegeneration/codegenerator/codewriter/Factory.h similarity index 100% rename from source/RobotAPI/libraries/aron/core/codegenerator/codewriter/Factory.h rename to source/RobotAPI/libraries/aron/codegeneration/codegenerator/codewriter/Factory.h diff --git a/source/RobotAPI/libraries/aron/core/codegenerator/codewriter/cpp/AronGeneratedClass.h b/source/RobotAPI/libraries/aron/codegeneration/codegenerator/codewriter/cpp/AronGeneratedClass.h similarity index 100% rename from source/RobotAPI/libraries/aron/core/codegenerator/codewriter/cpp/AronGeneratedClass.h rename to source/RobotAPI/libraries/aron/codegeneration/codegenerator/codewriter/cpp/AronGeneratedClass.h diff --git a/source/RobotAPI/libraries/aron/core/codegenerator/codewriter/cpp/Writer.cpp b/source/RobotAPI/libraries/aron/codegeneration/codegenerator/codewriter/cpp/Writer.cpp similarity index 98% rename from source/RobotAPI/libraries/aron/core/codegenerator/codewriter/cpp/Writer.cpp rename to source/RobotAPI/libraries/aron/codegeneration/codegenerator/codewriter/cpp/Writer.cpp index c5da7452b..777dbb0b3 100644 --- a/source/RobotAPI/libraries/aron/core/codegenerator/codewriter/cpp/Writer.cpp +++ b/source/RobotAPI/libraries/aron/codegeneration/codegenerator/codewriter/cpp/Writer.cpp @@ -194,7 +194,7 @@ namespace armarx::aron::codegenerator::cpp else { c->addInherit("public armarx::aron::codegenerator::cpp::AronGeneratedClass"); - c->addInclude("<RobotAPI/libraries/aron/core/codegenerator/codewriter/cpp/AronGeneratedClass.h>"); + c->addInclude("<RobotAPI/libraries/aron/codegeneration/codegenerator/codewriter/cpp/AronGeneratedClass.h>"); } for (const std::string& s : additionalIncludes) @@ -265,7 +265,7 @@ namespace armarx::aron::codegenerator::cpp setupMemberFields(c, publicGenerateIntEnumType.doc_values, generator); c->addInherit("public armarx::aron::codegenerator::cpp::AronGeneratedClass"); - c->addInclude("<RobotAPI/libraries/aron/core/codegenerator/codewriter/cpp/AronGeneratedClass.h>"); + c->addInclude("<RobotAPI/libraries/aron/codegeneration/codegenerator/codewriter/cpp/AronGeneratedClass.h>"); // ctor c->addCtor(generator.toCopyCtor(c->getName())); @@ -300,7 +300,7 @@ namespace armarx::aron::codegenerator::cpp CppClassPtr Writer::setupBasicCppClass(const typereader::GenerateInfo& info, const Generator& gen) const { const auto& type = gen.getType(); - if (type.getMaybe() != type::Maybe::eNone) + if (type.getMaybe() != type::Maybe::NONE) { // Should not happen since we check the maybe flag on creation of the generator. However, better to double check throw error::ValueNotValidException(__PRETTY_FUNCTION__, "Somehow the maybe flag of a top level object declaration is set. This is not valid!", std::to_string((int) type.getMaybe()) + " aka " + type::defaultconversion::string::Maybe2String.at(type.getMaybe()), type.getPath()); diff --git a/source/RobotAPI/libraries/aron/core/codegenerator/codewriter/cpp/Writer.h b/source/RobotAPI/libraries/aron/codegeneration/codegenerator/codewriter/cpp/Writer.h similarity index 87% rename from source/RobotAPI/libraries/aron/core/codegenerator/codewriter/cpp/Writer.h rename to source/RobotAPI/libraries/aron/codegeneration/codegenerator/codewriter/cpp/Writer.h index 2e6cc994c..1ce3857fe 100644 --- a/source/RobotAPI/libraries/aron/core/codegenerator/codewriter/cpp/Writer.h +++ b/source/RobotAPI/libraries/aron/codegeneration/codegenerator/codewriter/cpp/Writer.h @@ -30,15 +30,15 @@ #include <vector> // Parent class -#include <RobotAPI/libraries/aron/core/codegenerator/codewriter/CodeWriter.h> +#include <RobotAPI/libraries/aron/codegeneration/codegenerator/codewriter/CodeWriter.h> // ArmarX #include <ArmarXCore/libraries/cppgen/CppMethod.h> #include <ArmarXCore/libraries/cppgen/CppClass.h> #include <RobotAPI/libraries/aron/core/type/variant/All.h> -#include <RobotAPI/libraries/aron/core/codegenerator/codewriter/cpp/generator/toplevel/ObjectClass.h> -#include <RobotAPI/libraries/aron/core/codegenerator/codewriter/cpp/generator/toplevel/IntEnumClass.h> +#include <RobotAPI/libraries/aron/codegeneration/codegenerator/codewriter/cpp/generator/toplevel/ObjectClass.h> +#include <RobotAPI/libraries/aron/codegeneration/codegenerator/codewriter/cpp/generator/toplevel/IntEnumClass.h> namespace armarx::aron::codegenerator::cpp { diff --git a/source/RobotAPI/libraries/aron/core/codegenerator/codewriter/cpp/generator/All.h b/source/RobotAPI/libraries/aron/codegeneration/codegenerator/codewriter/cpp/generator/All.h similarity index 89% rename from source/RobotAPI/libraries/aron/core/codegenerator/codewriter/cpp/generator/All.h rename to source/RobotAPI/libraries/aron/codegeneration/codegenerator/codewriter/cpp/generator/All.h index 65ec2eca7..36169d4a2 100644 --- a/source/RobotAPI/libraries/aron/core/codegenerator/codewriter/cpp/generator/All.h +++ b/source/RobotAPI/libraries/aron/codegeneration/codegenerator/codewriter/cpp/generator/All.h @@ -6,7 +6,6 @@ #include "enum/All.h" #include "primitive/All.h" #include "any/All.h" -#include "dto/All.h" namespace { diff --git a/source/RobotAPI/libraries/aron/codegeneration/codegenerator/codewriter/cpp/generator/Factory.cpp b/source/RobotAPI/libraries/aron/codegeneration/codegenerator/codewriter/cpp/generator/Factory.cpp new file mode 100644 index 000000000..d159608a2 --- /dev/null +++ b/source/RobotAPI/libraries/aron/codegeneration/codegenerator/codewriter/cpp/generator/Factory.cpp @@ -0,0 +1,64 @@ +/* + * This file is part of ArmarX. + * + * Copyright (C) 2012-2016, High Performance Humanoid Technologies (H2T), + * Karlsruhe Institute of Technology (KIT), all rights reserved. + * + * ArmarX is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2 as + * published by the Free Software Foundation. + * + * ArmarX is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + * + * @author Fabian Peller-Konrad (fabian dot peller-konrad at kit dot edu) + * @copyright http://www.gnu.org/licenses/gpl-2.0.txt + * GNU General Public License + */ + +// STD/STL + +// Header +#include "Factory.h" + +// ArmarX +#include "All.h" +#include "enum/All.h" + +namespace armarx::aron::codegenerator::cpp +{ + // Access method + std::unique_ptr<Generator> GeneratorFactory::create(const type::Variant& n, const Path& path) const + { + auto desc = n.getDescriptor(); + switch(desc) + { + case type::Descriptor::LIST: return std::make_unique<generator::List>(dynamic_cast<const type::List&>(n)); + case type::Descriptor::DICT: return std::make_unique<generator::Dict>(dynamic_cast<const type::Dict&>(n)); + case type::Descriptor::OBJECT: return std::make_unique<generator::Object>(dynamic_cast<const type::Object&>(n)); + case type::Descriptor::TUPLE: return std::make_unique<generator::Tuple>(dynamic_cast<const type::Tuple&>(n)); + case type::Descriptor::PAIR: return std::make_unique<generator::Pair>(dynamic_cast<const type::Pair&>(n)); + case type::Descriptor::NDARRAY: return std::make_unique<generator::NDArray>(dynamic_cast<const type::NDArray&>(n)); + case type::Descriptor::MATRIX: return std::make_unique<generator::Matrix>(dynamic_cast<const type::Matrix&>(n)); + case type::Descriptor::QUATERNION: return std::make_unique<generator::Quaternion>(dynamic_cast<const type::Quaternion&>(n)); + case type::Descriptor::IMAGE: return std::make_unique<generator::Image>(dynamic_cast<const type::Image&>(n)); + case type::Descriptor::POINTCLOUD: return std::make_unique<generator::PointCloud>(dynamic_cast<const type::PointCloud&>(n)); + case type::Descriptor::INT_ENUM: return std::make_unique<generator::IntEnum>(dynamic_cast<const type::IntEnum&>(n)); + case type::Descriptor::INT: return std::make_unique<generator::Int>(dynamic_cast<const type::Int&>(n)); + case type::Descriptor::LONG: return std::make_unique<generator::Long>(dynamic_cast<const type::Long&>(n)); + case type::Descriptor::FLOAT: return std::make_unique<generator::Float>(dynamic_cast<const type::Float&>(n)); + case type::Descriptor::DOUBLE: return std::make_unique<generator::Double>(dynamic_cast<const type::Double&>(n)); + case type::Descriptor::STRING: return std::make_unique<generator::String>(dynamic_cast<const type::String&>(n)); + case type::Descriptor::BOOL: return std::make_unique<generator::Bool>(dynamic_cast<const type::Bool&>(n)); + case type::Descriptor::ANY_OBJECT: return std::make_unique<generator::AnyObject>(dynamic_cast<const type::AnyObject&>(n)); + case type::Descriptor::UNKNOWN: break; + } + throw error::ValueNotValidException(__PRETTY_FUNCTION__, "Cannot create a generator", std::to_string((int) desc), path); + } + +} diff --git a/source/RobotAPI/libraries/aron/core/codegenerator/codewriter/cpp/generator/Factory.h b/source/RobotAPI/libraries/aron/codegeneration/codegenerator/codewriter/cpp/generator/Factory.h similarity index 93% rename from source/RobotAPI/libraries/aron/core/codegenerator/codewriter/cpp/generator/Factory.h rename to source/RobotAPI/libraries/aron/codegeneration/codegenerator/codewriter/cpp/generator/Factory.h index 6f30af229..cc75cbe6b 100644 --- a/source/RobotAPI/libraries/aron/core/codegenerator/codewriter/cpp/generator/Factory.h +++ b/source/RobotAPI/libraries/aron/codegeneration/codegenerator/codewriter/cpp/generator/Factory.h @@ -29,7 +29,7 @@ // ArmarX #include <RobotAPI/libraries/aron/core/type/variant/All.h> -#include <RobotAPI/libraries/aron/core/codegenerator/codewriter/cpp/generator/All.h> +#include <RobotAPI/libraries/aron/codegeneration/codegenerator/codewriter/cpp/generator/All.h> #include <RobotAPI/libraries/aron/core/Descriptor.h> namespace armarx::aron::codegenerator::cpp diff --git a/source/RobotAPI/libraries/aron/core/codegenerator/codewriter/cpp/generator/Generator.cpp b/source/RobotAPI/libraries/aron/codegeneration/codegenerator/codewriter/cpp/generator/Generator.cpp similarity index 87% rename from source/RobotAPI/libraries/aron/core/codegenerator/codewriter/cpp/generator/Generator.cpp rename to source/RobotAPI/libraries/aron/codegeneration/codegenerator/codewriter/cpp/generator/Generator.cpp index 7db187e3e..fa4ead59d 100644 --- a/source/RobotAPI/libraries/aron/core/codegenerator/codewriter/cpp/generator/Generator.cpp +++ b/source/RobotAPI/libraries/aron/codegeneration/codegenerator/codewriter/cpp/generator/Generator.cpp @@ -108,15 +108,15 @@ namespace armarx::aron::codegenerator::cpp { switch (getType().getMaybe()) { - case type::Maybe::eNone: + case type::Maybe::NONE: return getInstantiatedCppTypename(); - case type::Maybe::eOptional: + case type::Maybe::OPTIONAL: return "std::optional<" + getInstantiatedCppTypename() + ">"; - case type::Maybe::eRawPointer: + case type::Maybe::RAW_PTR: return getInstantiatedCppTypename() + "*"; - case type::Maybe::eSharedPointer: + case type::Maybe::SHARED_PTR: return "std::shared_ptr<" + getInstantiatedCppTypename() + ">"; - case type::Maybe::eUniquePointer: + case type::Maybe::UNIQUE_PTR: return "std::unique_ptr<" + getInstantiatedCppTypename() + ">"; default: throw error::ValueNotValidException(__PRETTY_FUNCTION__, "Received unknown maybe enum", std::to_string((int) getType().getMaybe()), getType().getPath()); @@ -127,15 +127,15 @@ namespace armarx::aron::codegenerator::cpp { switch (getType().getMaybe()) { - case type::Maybe::eNone: + case type::Maybe::NONE: return getInstantiatedCppTypename(); - case type::Maybe::eOptional: + case type::Maybe::OPTIONAL: return "std::make_optional<" + getInstantiatedCppTypename() + ">"; - case type::Maybe::eRawPointer: + case type::Maybe::RAW_PTR: return getInstantiatedCppTypename() + "*"; - case type::Maybe::eSharedPointer: + case type::Maybe::SHARED_PTR: return "std::make_shared<" + getInstantiatedCppTypename() + ">"; - case type::Maybe::eUniquePointer: + case type::Maybe::UNIQUE_PTR: return "std::make_unique<" + getInstantiatedCppTypename() + ">"; default: throw error::ValueNotValidException(__PRETTY_FUNCTION__, "Received unknown maybe enum", std::to_string((int) getType().getMaybe()), getType().getPath()); @@ -151,15 +151,15 @@ namespace armarx::aron::codegenerator::cpp { switch (getType().getMaybe()) { - case type::Maybe::eNone: + case type::Maybe::NONE: return getClassCppTypename(); - case type::Maybe::eOptional: + case type::Maybe::OPTIONAL: return "std::optional<" + getClassCppTypename() + ">"; - case type::Maybe::eRawPointer: + case type::Maybe::RAW_PTR: return getClassCppTypename() + "*"; - case type::Maybe::eSharedPointer: + case type::Maybe::SHARED_PTR: return "std::shared_ptr<" + getClassCppTypename() + ">"; - case type::Maybe::eUniquePointer: + case type::Maybe::UNIQUE_PTR: return "std::unique_ptr<" + getClassCppTypename() + ">"; default: throw error::ValueNotValidException(__PRETTY_FUNCTION__, "Received unknown maybe enum", std::to_string((int) getType().getMaybe()), getType().getPath()); @@ -209,7 +209,7 @@ namespace armarx::aron::codegenerator::cpp doc << "@brief writeType() - This method returns a new type from the class structure using a type writer implementation. This function is static. \n"; doc << "@return - the result of the writer implementation"; - CppMethodPtr m = CppMethodPtr(new CppMethod("template<class WriterT>\nstatic typename WriterT::ReturnType writeType(WriterT& " + ARON_WRITER_ACCESSOR + ", std::vector<std::string> " + ARON_TEMPLATE_INSTANTIATIONS_ACCESSOR + " = {}, armarx::aron::type::Maybe "+ ARON_MAYBE_TYPE_ACCESSOR +" = armarx::aron::type::Maybe::eNone, const armarx::aron::Path& "+ARON_PATH_ACCESSOR+" = armarx::aron::Path())", doc.str())); + CppMethodPtr m = CppMethodPtr(new CppMethod("template<class WriterT>\nstatic typename WriterT::ReturnType writeType(WriterT& " + ARON_WRITER_ACCESSOR + ", std::vector<std::string> " + ARON_TEMPLATE_INSTANTIATIONS_ACCESSOR + " = {}, armarx::aron::type::Maybe "+ ARON_MAYBE_TYPE_ACCESSOR +" = armarx::aron::type::Maybe::NONE, const armarx::aron::Path& "+ARON_PATH_ACCESSOR+" = armarx::aron::Path())", doc.str())); CppBlockPtr b = std::make_shared<CppBlock>(); b->addLine("using _Aron_T [[maybe_unused]] = typename WriterT::ReturnType;"); @@ -370,11 +370,11 @@ namespace armarx::aron::codegenerator::cpp std::string Generator::resolveMaybeAccessor(const std::string& s) const { const auto& t = getType(); - if (t.getMaybe() == type::Maybe::eOptional) + if (t.getMaybe() == type::Maybe::OPTIONAL) { return s + ".value()"; } - if (t.getMaybe() == type::Maybe::eRawPointer || t.getMaybe() == type::Maybe::eSharedPointer || t.getMaybe() == type::Maybe::eUniquePointer) + if (t.getMaybe() == type::Maybe::RAW_PTR || t.getMaybe() == type::Maybe::SHARED_PTR || t.getMaybe() == type::Maybe::UNIQUE_PTR) { return "*" + s; } @@ -384,19 +384,19 @@ namespace armarx::aron::codegenerator::cpp std::string Generator::resolveMaybeGenerator(const std::string& s) const { const auto& t = getType(); - if (t.getMaybe() == type::Maybe::eOptional) + if (t.getMaybe() == type::Maybe::OPTIONAL) { return s + " = std::make_optional<" + getInstantiatedCppTypename() + ">();"; } - if (t.getMaybe() == type::Maybe::eRawPointer) + if (t.getMaybe() == type::Maybe::RAW_PTR) { return s + " = new " + getInstantiatedCppTypename() + "();"; } - if (t.getMaybe() == type::Maybe::eSharedPointer) + if (t.getMaybe() == type::Maybe::SHARED_PTR) { return s + " = std::make_shared<" + getInstantiatedCppTypename() + ">();"; } - if (t.getMaybe() == type::Maybe::eUniquePointer) + if (t.getMaybe() == type::Maybe::UNIQUE_PTR) { return s + " = std::make_unique<" + getInstantiatedCppTypename() + ">();"; } @@ -408,12 +408,12 @@ namespace armarx::aron::codegenerator::cpp const auto& type = getType(); switch (type.getMaybe()) { - case type::Maybe::eNone: + case type::Maybe::NONE: return "."; - case type::Maybe::eOptional: //[[fallthrough]]; - case type::Maybe::eRawPointer: //[[fallthrough]]; - case type::Maybe::eSharedPointer: //[[fallthrough]]; - case type::Maybe::eUniquePointer: + case type::Maybe::OPTIONAL: //[[fallthrough]]; + case type::Maybe::RAW_PTR: //[[fallthrough]]; + case type::Maybe::SHARED_PTR: //[[fallthrough]]; + case type::Maybe::UNIQUE_PTR: return "->"; } throw error::ValueNotValidException(__PRETTY_FUNCTION__, "Received unknown maybe enum", std::to_string((int) type.getMaybe()), type.getPath()); @@ -424,14 +424,14 @@ namespace armarx::aron::codegenerator::cpp const auto& type = getType(); switch (type.getMaybe()) { - case type::Maybe::eRawPointer: + case type::Maybe::RAW_PTR: return cppAccessor; - case type::Maybe::eSharedPointer: //[[fallthrough]]; - case type::Maybe::eUniquePointer: + case type::Maybe::SHARED_PTR: //[[fallthrough]]; + case type::Maybe::UNIQUE_PTR: return cppAccessor + ".get()"; - case type::Maybe::eNone: //[[fallthrough]]; - case type::Maybe::eOptional: break; + case type::Maybe::NONE: //[[fallthrough]]; + case type::Maybe::OPTIONAL: break; } throw error::ValueNotValidException(__PRETTY_FUNCTION__, "Received invalid maybe enum (not a pointer?)", std::to_string((int) type.getMaybe()), type.getPath()); } @@ -439,13 +439,13 @@ namespace armarx::aron::codegenerator::cpp CppBlockPtr Generator::resolveMaybeResetHardBlock(const CppBlockPtr& block_if_data, const std::string& cppAccessor) const { const auto& type = getType(); - if (type.getMaybe() == type::Maybe::eOptional) + if (type.getMaybe() == type::Maybe::OPTIONAL) { CppBlockPtr b = std::make_shared<CppBlock>(); b->addLine(cppAccessor + " = std::nullopt;"); return b; } - else if (type.getMaybe() == type::Maybe::eRawPointer || type.getMaybe() == type::Maybe::eSharedPointer || type.getMaybe() == type::Maybe::eUniquePointer) + else if (type.getMaybe() == type::Maybe::RAW_PTR || type.getMaybe() == type::Maybe::SHARED_PTR || type.getMaybe() == type::Maybe::UNIQUE_PTR) { CppBlockPtr b = std::make_shared<CppBlock>(); b->addLine(cppAccessor + " = nullptr;"); @@ -457,7 +457,7 @@ namespace armarx::aron::codegenerator::cpp CppBlockPtr Generator::resolveMaybeResetSoftBlock(const CppBlockPtr& block_if_data, const std::string& cppAccessor) const { const auto& type = getType(); - if (type.getMaybe() == type::Maybe::eOptional || type.getMaybe() == type::Maybe::eRawPointer || type.getMaybe() == type::Maybe::eSharedPointer || type.getMaybe() == type::Maybe::eUniquePointer) + if (type.getMaybe() == type::Maybe::OPTIONAL || type.getMaybe() == type::Maybe::RAW_PTR || type.getMaybe() == type::Maybe::SHARED_PTR || type.getMaybe() == type::Maybe::UNIQUE_PTR) { CppBlockPtr b = std::make_shared<CppBlock>(); b->addLine("if (" + cppAccessor + ") // if " + cppAccessor + " contains data"); @@ -470,7 +470,7 @@ namespace armarx::aron::codegenerator::cpp CppBlockPtr Generator::resolveMaybeWriteBlock(const CppBlockPtr& block_if_data, const std::string& cppAccessor) const { const auto& type = getType(); - if (type.getMaybe() == type::Maybe::eOptional || type.getMaybe() == type::Maybe::eRawPointer || type.getMaybe() == type::Maybe::eSharedPointer || type.getMaybe() == type::Maybe::eUniquePointer) + if (type.getMaybe() == type::Maybe::OPTIONAL || type.getMaybe() == type::Maybe::RAW_PTR || type.getMaybe() == type::Maybe::SHARED_PTR || type.getMaybe() == type::Maybe::UNIQUE_PTR) { CppBlockPtr b = std::make_shared<CppBlock>(); b->addLine("if (" + cppAccessor + ") // if " + cppAccessor + " contains data"); @@ -483,7 +483,7 @@ namespace armarx::aron::codegenerator::cpp CppBlockPtr Generator::resolveMaybeReadBlock(const CppBlockPtr& block_if_data, const std::string& cppAccessor, const std::string& variantAccessor) const { const auto& type = getType(); - if (type.getMaybe() == type::Maybe::eOptional || type.getMaybe() == type::Maybe::eRawPointer || type.getMaybe() == type::Maybe::eSharedPointer || type.getMaybe() == type::Maybe::eUniquePointer) + if (type.getMaybe() == type::Maybe::OPTIONAL || type.getMaybe() == type::Maybe::RAW_PTR || type.getMaybe() == type::Maybe::SHARED_PTR || type.getMaybe() == type::Maybe::UNIQUE_PTR) { CppBlockPtr b = std::make_shared<CppBlock>(); b->addLine("if (not (" + ARON_READER_ACCESSOR + ".readNull(" + variantAccessor + "))) // if aron contains data"); @@ -501,7 +501,7 @@ namespace armarx::aron::codegenerator::cpp CppBlockPtr Generator::resolveMaybeEqualsBlock(const CppBlockPtr& block_if_data, const std::string& accessor, const std::string& otherInstanceAccessor) const { const auto& type = getType(); - if (type.getMaybe() == type::Maybe::eOptional || type.getMaybe() == type::Maybe::eRawPointer || type.getMaybe() == type::Maybe::eSharedPointer || type.getMaybe() == type::Maybe::eUniquePointer) + if (type.getMaybe() == type::Maybe::OPTIONAL || type.getMaybe() == type::Maybe::RAW_PTR || type.getMaybe() == type::Maybe::SHARED_PTR || type.getMaybe() == type::Maybe::UNIQUE_PTR) { CppBlockPtr b = std::make_shared<CppBlock>(); b->addLine("if (not ((bool) " + accessor + " == (bool) " + otherInstanceAccessor + ")) // check if both contain data"); diff --git a/source/RobotAPI/libraries/aron/core/codegenerator/codewriter/cpp/generator/Generator.h b/source/RobotAPI/libraries/aron/codegeneration/codegenerator/codewriter/cpp/generator/Generator.h similarity index 70% rename from source/RobotAPI/libraries/aron/core/codegenerator/codewriter/cpp/generator/Generator.h rename to source/RobotAPI/libraries/aron/codegeneration/codegenerator/codewriter/cpp/generator/Generator.h index 604815e5e..57b140cc6 100644 --- a/source/RobotAPI/libraries/aron/core/codegenerator/codewriter/cpp/generator/Generator.h +++ b/source/RobotAPI/libraries/aron/codegeneration/codegenerator/codewriter/cpp/generator/Generator.h @@ -26,8 +26,8 @@ #include <RobotAPI/interface/aron.h> #include <RobotAPI/libraries/aron/core/Exception.h> #include <RobotAPI/libraries/aron/core/type/variant/Variant.h> -#include <RobotAPI/libraries/aron/core/codegenerator/helper/ReaderInfo.h> -#include <RobotAPI/libraries/aron/core/codegenerator/helper/WriterInfo.h> +#include <RobotAPI/libraries/aron/codegeneration/codegenerator/helper/ReaderInfo.h> +#include <RobotAPI/libraries/aron/codegeneration/codegenerator/helper/WriterInfo.h> #include <ArmarXCore/libraries/cppgen/CppBlock.h> #include <ArmarXCore/libraries/cppgen/CppField.h> @@ -48,43 +48,11 @@ namespace armarx::aron::codegenerator::cpp { const std::map<type::Maybe, std::string> Maybe2CppString = { - {type::Maybe::eNone, "armarx::aron::type::Maybe::eNone"}, - {type::Maybe::eOptional, "armarx::aron::type::Maybe::eOptional"}, - {type::Maybe::eRawPointer, "armarx::aron::type::Maybe::eRawPointer"}, - {type::Maybe::eSharedPointer, "armarx::aron::type::Maybe::eSharedPointer"}, - {type::Maybe::eUniquePointer, "armarx::aron::type::Maybe::eUniquePointer"} - }; - - const std::map<type::matrix::ElementType, std::string> MatrixElementType2CppString = - { - {type::matrix::int16, "::armarx::aron::type::matrix::int16"}, - {type::matrix::int32, "::armarx::aron::type::matrix::int32"}, - {type::matrix::int64, "::armarx::aron::type::matrix::int64"}, - {type::matrix::float32, "::armarx::aron::type::matrix::float32"}, - {type::matrix::float64, "::armarx::aron::type::matrix::float64"} - }; - - const std::map<type::pointcloud::VoxelType, std::string> VoxelType2CppString = - { - {type::pointcloud::VoxelType::PointXYZ, "::armarx::aron::type::pointcloud::VoxelType::PointXYZ"}, - {type::pointcloud::VoxelType::PointXYZI, "::armarx::aron::type::pointcloud::VoxelType::PointXYZI"}, - {type::pointcloud::VoxelType::PointXYZL, "::armarx::aron::type::pointcloud::VoxelType::PointXYZL"}, - {type::pointcloud::VoxelType::PointXYZRGB, "::armarx::aron::type::pointcloud::VoxelType::PointXYZRGB"}, - {type::pointcloud::VoxelType::PointXYZRGBL, "::armarx::aron::type::pointcloud::VoxelType::PointXYZRGBL"}, - {type::pointcloud::VoxelType::PointXYZRGBA, "::armarx::aron::type::pointcloud::VoxelType::PointXYZRGBA"}, - {type::pointcloud::VoxelType::PointXYZHSV, "::armarx::aron::type::pointcloud::VoxelType::PointXYZHSV"} - }; - - const std::map<type::image::PixelType, std::string> PixelType2CppString = - { - {type::image::PixelType::rgb24, "::armarx::aron::type::image::PixelType::rgb24"}, - {type::image::PixelType::depth32, "::armarx::aron::type::image::PixelType::depth32"} - }; - - const std::map<type::quaternion::ElementType, std::string> QuaternionElementType2Cpp = - { - {type::quaternion::ElementType::float32, "::armarx::aron::type::quaternion::ElementType::float32"}, - {type::quaternion::ElementType::float64, "::armarx::aron::type::quaternion::ElementType::float64"} + {type::Maybe::NONE, "::armarx::aron::type::Maybe::NONE"}, + {type::Maybe::OPTIONAL, "::armarx::aron::type::Maybe::OPTIONAL"}, + {type::Maybe::RAW_PTR, "::armarx::aron::type::Maybe::RAW_PTR"}, + {type::Maybe::SHARED_PTR, "::armarx::aron::type::Maybe::SHARED_PTR"}, + {type::Maybe::UNIQUE_PTR, "::armarx::aron::type::Maybe::UNIQUE_PTR"} }; } diff --git a/source/RobotAPI/libraries/aron/core/codegenerator/codewriter/cpp/generator/any/All.h b/source/RobotAPI/libraries/aron/codegeneration/codegenerator/codewriter/cpp/generator/any/All.h similarity index 100% rename from source/RobotAPI/libraries/aron/core/codegenerator/codewriter/cpp/generator/any/All.h rename to source/RobotAPI/libraries/aron/codegeneration/codegenerator/codewriter/cpp/generator/any/All.h diff --git a/source/RobotAPI/libraries/aron/core/codegenerator/codewriter/cpp/generator/any/AnyObject.cpp b/source/RobotAPI/libraries/aron/codegeneration/codegenerator/codewriter/cpp/generator/any/AnyObject.cpp similarity index 56% rename from source/RobotAPI/libraries/aron/core/codegenerator/codewriter/cpp/generator/any/AnyObject.cpp rename to source/RobotAPI/libraries/aron/codegeneration/codegenerator/codewriter/cpp/generator/any/AnyObject.cpp index 169262339..b81341ae2 100644 --- a/source/RobotAPI/libraries/aron/core/codegenerator/codewriter/cpp/generator/any/AnyObject.cpp +++ b/source/RobotAPI/libraries/aron/codegeneration/codegenerator/codewriter/cpp/generator/any/AnyObject.cpp @@ -37,14 +37,43 @@ namespace armarx::aron::codegenerator::cpp::generator simox::meta::get_type_name<type::dto::AnyObject>(), e) { - if (type.getMaybe() != type::Maybe::eSharedPointer) + // if the type is not known, we only accept shared ptr for unspecified aron dicts + if (type.getMaybe() != type::Maybe::SHARED_PTR) { - throw error::ValueNotValidException(__PRETTY_FUNCTION__, "At the momen the any object type must be a shared_ptr! Got ", std::to_string((int) type.getMaybe()) + " aka " + type::defaultconversion::string::Maybe2String.at(type.getMaybe()), type.getPath()); + throw error::ValueNotValidException(__PRETTY_FUNCTION__, "At the moment the unknown any object type must be a shared_ptr! ", std::to_string((int) type.getMaybe()) + " aka " + type::defaultconversion::string::Maybe2String.at(type.getMaybe()), type.getPath()); } + } /* virtual implementations */ + std::vector<std::string> AnyObject::getRequiredIncludes() const + { + std::vector<std::string> required_includes = {"<RobotAPI/libraries/aron/core/data/converter/variant/VariantConverter.h>"}; + return required_includes; + } + + CppBlockPtr AnyObject::getWriteBlock(const std::string& cppAccessor, const Path& p, std::string& variantAccessor) const + { + auto block_if_data = std::make_shared<CppBlock>(); + std::string escaped_accessor = this->EscapeAccessor(cppAccessor); + variantAccessor = Generator::ARON_VARIANT_RETURN_ACCESSOR + "_" + escaped_accessor; + + block_if_data->addLine(variantAccessor + " = armarx::aron::data::readAndWrite<armarx::aron::data::FromVariantConverter<WriterT>>(" + cppAccessor + "); // of " + cppAccessor); + + return block_if_data; + } + + CppBlockPtr AnyObject::getReadBlock(const std::string& cppAccessor, const std::string& variantAccessor) const + { + auto block_if_data = std::make_shared<CppBlock>(); + std::string escaped_accessor = this->EscapeAccessor(cppAccessor); + + block_if_data->addLine(cppAccessor + " = armarx::aron::data::Dict::DynamicCastAndCheck(armarx::aron::data::readAndWrite<aron::data::ToVariantConverter<ReaderT>>(" + variantAccessor + ")); // of " + cppAccessor); + + return block_if_data; + } + CppBlockPtr AnyObject::getWriteTypeBlock(const std::string& typeAccessor, const std::string& accessor, const Path& p, std::string& variantAccessor) const { CppBlockPtr b = std::make_shared<CppBlock>(); diff --git a/source/RobotAPI/libraries/aron/core/codegenerator/codewriter/cpp/generator/any/AnyObject.h b/source/RobotAPI/libraries/aron/codegeneration/codegenerator/codewriter/cpp/generator/any/AnyObject.h similarity index 76% rename from source/RobotAPI/libraries/aron/core/codegenerator/codewriter/cpp/generator/any/AnyObject.h rename to source/RobotAPI/libraries/aron/codegeneration/codegenerator/codewriter/cpp/generator/any/AnyObject.h index 5d777de42..bfa7692ff 100644 --- a/source/RobotAPI/libraries/aron/core/codegenerator/codewriter/cpp/generator/any/AnyObject.h +++ b/source/RobotAPI/libraries/aron/codegeneration/codegenerator/codewriter/cpp/generator/any/AnyObject.h @@ -23,7 +23,7 @@ #pragma once -#include <RobotAPI/libraries/aron/core/codegenerator/codewriter/cpp/generator/detail/AnyGenerator.h> +#include <RobotAPI/libraries/aron/codegeneration/codegenerator/codewriter/cpp/generator/detail/AnyGenerator.h> #include <RobotAPI/libraries/aron/core/type/variant/any/AnyObject.h> @@ -38,6 +38,12 @@ namespace armarx::aron::codegenerator::cpp::generator virtual ~AnyObject() = default; /* virtual implementations */ - CppBlockPtr getWriteTypeBlock(const std::string& typeAccessor, const std::string& cppAccessor, const Path& p, std::string& variantAccessor) const override; + std::vector<std::string> getRequiredIncludes() const final; + + CppBlockPtr getWriteTypeBlock(const std::string& typeAccessor, const std::string& cppAccessor, const Path& p, std::string& variantAccessor) const final; + + CppBlockPtr getWriteBlock(const std::string& cppAccessor, const Path& p, std::string& variantAccessor) const final; + + CppBlockPtr getReadBlock(const std::string& cppAccessor, const std::string& variantAccessor) const final; }; } diff --git a/source/RobotAPI/libraries/aron/core/codegenerator/codewriter/cpp/generator/container/All.h b/source/RobotAPI/libraries/aron/codegeneration/codegenerator/codewriter/cpp/generator/container/All.h similarity index 100% rename from source/RobotAPI/libraries/aron/core/codegenerator/codewriter/cpp/generator/container/All.h rename to source/RobotAPI/libraries/aron/codegeneration/codegenerator/codewriter/cpp/generator/container/All.h diff --git a/source/RobotAPI/libraries/aron/core/codegenerator/codewriter/cpp/generator/container/Dict.cpp b/source/RobotAPI/libraries/aron/codegeneration/codegenerator/codewriter/cpp/generator/container/Dict.cpp similarity index 100% rename from source/RobotAPI/libraries/aron/core/codegenerator/codewriter/cpp/generator/container/Dict.cpp rename to source/RobotAPI/libraries/aron/codegeneration/codegenerator/codewriter/cpp/generator/container/Dict.cpp diff --git a/source/RobotAPI/libraries/aron/core/codegenerator/codewriter/cpp/generator/container/Dict.h b/source/RobotAPI/libraries/aron/codegeneration/codegenerator/codewriter/cpp/generator/container/Dict.h similarity index 82% rename from source/RobotAPI/libraries/aron/core/codegenerator/codewriter/cpp/generator/container/Dict.h rename to source/RobotAPI/libraries/aron/codegeneration/codegenerator/codewriter/cpp/generator/container/Dict.h index f822086cf..ae26828fd 100644 --- a/source/RobotAPI/libraries/aron/core/codegenerator/codewriter/cpp/generator/container/Dict.h +++ b/source/RobotAPI/libraries/aron/codegeneration/codegenerator/codewriter/cpp/generator/container/Dict.h @@ -24,7 +24,7 @@ #pragma once #include <RobotAPI/libraries/aron/core/type/variant/container/Dict.h> -#include <RobotAPI/libraries/aron/core/codegenerator/codewriter/cpp/generator/detail/ContainerGenerator.h> +#include <RobotAPI/libraries/aron/codegeneration/codegenerator/codewriter/cpp/generator/detail/ContainerGenerator.h> namespace armarx::aron::codegenerator::cpp::generator { @@ -37,10 +37,10 @@ namespace armarx::aron::codegenerator::cpp::generator virtual ~Dict() = default; // virtual implementations - std::vector<std::string> getRequiredIncludes() const override; - CppBlockPtr getResetSoftBlock(const std::string& cppAccessor) const override; - CppBlockPtr getWriteTypeBlock(const std::string& typeAccessor, const std::string& cppAccessor, const Path&, std::string& variantAccessor) const override; - CppBlockPtr getWriteBlock(const std::string& cppAccessor, const Path&, std::string& variantAccessor) const override; - CppBlockPtr getReadBlock(const std::string& cppAccessor, const std::string& variantAccessor) const override; + std::vector<std::string> getRequiredIncludes() const final; + CppBlockPtr getResetSoftBlock(const std::string& cppAccessor) const final; + CppBlockPtr getWriteTypeBlock(const std::string& typeAccessor, const std::string& cppAccessor, const Path&, std::string& variantAccessor) const final; + CppBlockPtr getWriteBlock(const std::string& cppAccessor, const Path&, std::string& variantAccessor) const final; + CppBlockPtr getReadBlock(const std::string& cppAccessor, const std::string& variantAccessor) const final; }; } diff --git a/source/RobotAPI/libraries/aron/core/codegenerator/codewriter/cpp/generator/container/List.cpp b/source/RobotAPI/libraries/aron/codegeneration/codegenerator/codewriter/cpp/generator/container/List.cpp similarity index 100% rename from source/RobotAPI/libraries/aron/core/codegenerator/codewriter/cpp/generator/container/List.cpp rename to source/RobotAPI/libraries/aron/codegeneration/codegenerator/codewriter/cpp/generator/container/List.cpp diff --git a/source/RobotAPI/libraries/aron/core/codegenerator/codewriter/cpp/generator/container/List.h b/source/RobotAPI/libraries/aron/codegeneration/codegenerator/codewriter/cpp/generator/container/List.h similarity index 82% rename from source/RobotAPI/libraries/aron/core/codegenerator/codewriter/cpp/generator/container/List.h rename to source/RobotAPI/libraries/aron/codegeneration/codegenerator/codewriter/cpp/generator/container/List.h index 26aa99b33..5c7302a68 100644 --- a/source/RobotAPI/libraries/aron/core/codegenerator/codewriter/cpp/generator/container/List.h +++ b/source/RobotAPI/libraries/aron/codegeneration/codegenerator/codewriter/cpp/generator/container/List.h @@ -24,7 +24,7 @@ #pragma once #include <RobotAPI/libraries/aron/core/type/variant/container/List.h> -#include <RobotAPI/libraries/aron/core/codegenerator/codewriter/cpp/generator/detail/ContainerGenerator.h> +#include <RobotAPI/libraries/aron/codegeneration/codegenerator/codewriter/cpp/generator/detail/ContainerGenerator.h> namespace armarx::aron::codegenerator::cpp::generator @@ -38,10 +38,10 @@ namespace armarx::aron::codegenerator::cpp::generator virtual ~List() = default; // virtual implementations - std::vector<std::string> getRequiredIncludes() const override; - CppBlockPtr getResetSoftBlock(const std::string& cppAccessor) const override; - CppBlockPtr getWriteTypeBlock(const std::string& typeAccessor, const std::string& cppAccessor, const Path&, std::string& variantAccessor) const override; - CppBlockPtr getWriteBlock(const std::string& cppAccessor, const Path&, std::string& variantAccessor) const override; - CppBlockPtr getReadBlock(const std::string& cppAccessor, const std::string& variantAccessor) const override; + std::vector<std::string> getRequiredIncludes() const final; + CppBlockPtr getResetSoftBlock(const std::string& cppAccessor) const final; + CppBlockPtr getWriteTypeBlock(const std::string& typeAccessor, const std::string& cppAccessor, const Path&, std::string& variantAccessor) const final; + CppBlockPtr getWriteBlock(const std::string& cppAccessor, const Path&, std::string& variantAccessor) const final; + CppBlockPtr getReadBlock(const std::string& cppAccessor, const std::string& variantAccessor) const final; }; } diff --git a/source/RobotAPI/libraries/aron/codegeneration/codegenerator/codewriter/cpp/generator/container/Object.cpp b/source/RobotAPI/libraries/aron/codegeneration/codegenerator/codewriter/cpp/generator/container/Object.cpp new file mode 100644 index 000000000..c7a8773cb --- /dev/null +++ b/source/RobotAPI/libraries/aron/codegeneration/codegenerator/codewriter/cpp/generator/container/Object.cpp @@ -0,0 +1,204 @@ +/* + * This file is part of ArmarX. + * + * Copyright (C) 2012-2016, High Performance Humanoid Technologies (H2T), + * Karlsruhe Institute of Technology (KIT), all rights reserved. + * + * ArmarX is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2 as + * published by the Free Software Foundation. + * + * ArmarX is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + * + * @author Fabian Peller-Konrad (fabian dot peller-konrad at kit dot edu) + * @copyright http://www.gnu.org/licenses/gpl-2.0.txt + * GNU General Public License + */ + +// Header +#include "Object.h" + +#include <SimoxUtility/meta/type_name.h> +#include <SimoxUtility/algorithm/vector.hpp> + + +namespace armarx::aron::codegenerator::cpp::generator +{ + + namespace + { + std::pair<std::string, bool> checkForDtoTypeReplacements(const std::string& c) + { + static const std::map<std::string, std::string> DTO_REPLACEMENTS = + { + {"armarx::arondto::Duration", "armarx::core::time::Duration"}, + {"armarx::arondto::DateTime", "armarx::core::time::DateTime"} + }; + + if (DTO_REPLACEMENTS.count(c) > 0) + { + auto s = DTO_REPLACEMENTS.at(c); + return {s, true}; + } + + // dont change the input + return {c, false}; + } + + std::vector<std::string> checkForAdditionalIncludes(const std::string& c) + { + static const std::map<std::string, std::vector<std::string>> DTO_REPLACEMENTS = + { + {"armarx::arondto::Duration", {"<ArmarXCore/core/time/Duration.h>", "<RobotAPI/libraries/aron/common/aron_conversions/time.h>", "<RobotAPI/libraries/aron/common/aron/time.aron.generated.h>"}}, + {"armarx::arondto::DateTime", {"<ArmarXCore/core/time/DateTime.h>", "<RobotAPI/libraries/aron/common/aron_conversions/time.h>", "<RobotAPI/libraries/aron/common/aron/time.aron.generated.h>"}} + }; + + if (DTO_REPLACEMENTS.count(c) > 0) + { + return DTO_REPLACEMENTS.at(c); + } + + // dont change the input + return {}; + } + } + + // constructors + Object::Object(const type::Object& e) : + detail::ContainerGenerator<type::Object, Object>( + e.getObjectNameWithTemplateInstantiations(), + e.getObjectNameWithTemplates(), + simox::meta::get_type_name<data::dto::Dict>(), + simox::meta::get_type_name<type::dto::AronObject>(), e), + isDtoReplacedObject(checkForDtoTypeReplacements(e.getObjectNameWithTemplateInstantiations()).second) + { + if (isDtoReplacedObject && getClassCppTypename() != getInstantiatedCppTypename()) + { + throw error::ValueNotValidException(__PRETTY_FUNCTION__, "Templates in dto replaced objects are not supported yet!", getInstantiatedCppTypename(), type.getPath()); + } + } + + + std::vector<std::string> Object::getRequiredIncludes() const + { + std::vector<std::string> ret; + + // check for includes of members + for (const auto& [key, child] : type.getMemberTypes()) + { + (void) key; + auto child_s = FromAronType(*child); + ret = simox::alg::appended(ret, child_s->getRequiredIncludes()); + } + + // also check for additional includes from dto replacements + ret = simox::alg::appended(ret, checkForAdditionalIncludes(type.getObjectNameWithTemplates())); + + return ret; + } + + std::vector<CppFieldPtr> Object::getPublicVariableDeclarations(const std::string& name) const + { + auto r = checkForDtoTypeReplacements(this->getFullInstantiatedCppTypename()); + auto field = std::make_shared<CppField>(r.first, name); + return {field}; + } + + CppBlockPtr Object::getResetSoftBlock(const std::string& cppAccessor) const + { + CppBlockPtr block_if_data = std::make_shared<CppBlock>(); + if (isDtoReplacedObject) + { + block_if_data->addLine(cppAccessor + " = {};"); + } + else + { + block_if_data->addLine(cppAccessor + nextEl() + "resetSoft();"); + } + return this->resolveMaybeResetSoftBlock(block_if_data, cppAccessor); + } + + CppBlockPtr Object::getResetHardBlock(const std::string& cppAccessor) const + { + CppBlockPtr block_if_data = std::make_shared<CppBlock>(); + auto r = checkForDtoTypeReplacements(this->getFullInstantiatedCppTypename()); + block_if_data->addLine(cppAccessor + " = " + r.first + "();"); + return this->resolveMaybeResetSoftBlock(block_if_data, cppAccessor); + } + + CppBlockPtr Object::getWriteTypeBlock(const std::string& typeAccessor, const std::string& cppAccessor, const Path& p, std::string& variantAccessor) const + { + CppBlockPtr b = std::make_shared<CppBlock>(); + std::string escaped_accessor = EscapeAccessor(cppAccessor); + variantAccessor = ARON_VARIANT_RETURN_ACCESSOR + "_" + escaped_accessor; + + std::vector<std::string> templatesQuoted; + for (const auto& t : type.getTemplateInstantiations()) + { + templatesQuoted.push_back("\"" + t + "\""); + } + + b->addLine("auto " + variantAccessor + " = " + type.getObjectNameWithTemplateInstantiations() + "::writeType(" + ARON_WRITER_ACCESSOR + ", " + + "{" + simox::alg::join(templatesQuoted, ", ") + "}, " + + conversion::Maybe2CppString.at(type.getMaybe()) + ", " + + "armarx::aron::Path("+ARON_PATH_ACCESSOR+", {"+simox::alg::join(p.getPath(), ", ")+"})); // of " + cppAccessor); + return b; + } + + CppBlockPtr Object::getWriteBlock(const std::string& cppAccessor, const Path& p, std::string& variantAccessor) const + { + CppBlockPtr block_if_data = std::make_shared<CppBlock>(); + std::string escaped_accessor = EscapeAccessor(cppAccessor); + std::string resolved_accessor = resolveMaybeAccessor(cppAccessor); + variantAccessor = ARON_VARIANT_RETURN_ACCESSOR + "_" + escaped_accessor; + + // if is dto replacement + if (isDtoReplacedObject) + { + auto variantAccessorTmp = variantAccessor + "_tmp"; + block_if_data->addLine("auto " + variantAccessorTmp + " = " + getClassCppTypename() + "();"); + block_if_data->addLine("armarx::toAron("+variantAccessorTmp+", "+resolved_accessor+");"); + block_if_data->addLine(variantAccessor + " = " + variantAccessorTmp + ".write(" + ARON_WRITER_ACCESSOR + ", "+ + "armarx::aron::Path("+ARON_PATH_ACCESSOR+", {"+simox::alg::join(p.getPath(), ", ")+"})); // of " + cppAccessor); + } + else + { + block_if_data->addLine(variantAccessor + " = " + cppAccessor + nextEl() + "write(" + ARON_WRITER_ACCESSOR + ", "+ + "armarx::aron::Path("+ARON_PATH_ACCESSOR+", {"+simox::alg::join(p.getPath(), ", ")+"})); // of " + cppAccessor); + } + + return resolveMaybeWriteBlock(block_if_data, cppAccessor); + } + + CppBlockPtr Object::getReadBlock(const std::string& cppAccessor, const std::string& variantAccessor) const + { + CppBlockPtr block_if_data = std::make_shared<CppBlock>(); + if (const auto reset = resolveMaybeGenerator(cppAccessor); !reset.empty()) + { + block_if_data->addLine(reset); + } + + if (isDtoReplacedObject) + { + std::string escaped_accessor = EscapeAccessor(cppAccessor); + std::string resolved_accessor = resolveMaybeAccessor(cppAccessor); + std::string variantAccessorTmp = ARON_VARIANT_RETURN_ACCESSOR + "_" + escaped_accessor + "_tmp"; + block_if_data->addLine("auto " + variantAccessorTmp + " = " + getClassCppTypename() + "();"); + block_if_data->addLine(variantAccessorTmp + ".read(" + ARON_READER_ACCESSOR + ", " + variantAccessor + ");"); + block_if_data->addLine("armarx::fromAron(" + variantAccessorTmp + ", " + resolved_accessor + "); // of " + cppAccessor); + } + else + { + block_if_data->addLine(cppAccessor + nextEl() + "read(" + ARON_READER_ACCESSOR + ", " + variantAccessor + "); // of " + cppAccessor); + } + + return resolveMaybeReadBlock(block_if_data, cppAccessor, variantAccessor); + } +} + diff --git a/source/RobotAPI/libraries/aron/core/codegenerator/codewriter/cpp/generator/container/Object.h b/source/RobotAPI/libraries/aron/codegeneration/codegenerator/codewriter/cpp/generator/container/Object.h similarity index 73% rename from source/RobotAPI/libraries/aron/core/codegenerator/codewriter/cpp/generator/container/Object.h rename to source/RobotAPI/libraries/aron/codegeneration/codegenerator/codewriter/cpp/generator/container/Object.h index cbdd8910f..28b94bfe1 100644 --- a/source/RobotAPI/libraries/aron/core/codegenerator/codewriter/cpp/generator/container/Object.h +++ b/source/RobotAPI/libraries/aron/codegeneration/codegenerator/codewriter/cpp/generator/container/Object.h @@ -23,7 +23,7 @@ #pragma once -#include <RobotAPI/libraries/aron/core/codegenerator/codewriter/cpp/generator/detail/ContainerGenerator.h> +#include <RobotAPI/libraries/aron/codegeneration/codegenerator/codewriter/cpp/generator/detail/ContainerGenerator.h> #include <RobotAPI/libraries/aron/core/type/variant/container/Object.h> @@ -38,10 +38,15 @@ namespace armarx::aron::codegenerator::cpp::generator virtual ~Object() = default; // virtual implementations - std::vector<std::string> getRequiredIncludes() const override; - CppBlockPtr getResetSoftBlock(const std::string& cppAccessor) const override; - CppBlockPtr getWriteTypeBlock(const std::string& typeAccessor, const std::string& cppAccessor, const Path&, std::string& variantAccessor) const override; - CppBlockPtr getWriteBlock(const std::string& cppAccessor, const Path&, std::string& variantAccessor) const override; - CppBlockPtr getReadBlock(const std::string& cppAccessor, const std::string& variantAccessor) const override; + std::vector<std::string> getRequiredIncludes() const final; + std::vector<CppFieldPtr> getPublicVariableDeclarations(const std::string&) const final; + CppBlockPtr getResetSoftBlock(const std::string& cppAccessor) const final; + CppBlockPtr getResetHardBlock(const std::string& cppAccessor) const final; + CppBlockPtr getWriteTypeBlock(const std::string& typeAccessor, const std::string& cppAccessor, const Path&, std::string& variantAccessor) const final; + CppBlockPtr getWriteBlock(const std::string& cppAccessor, const Path&, std::string& variantAccessor) const final; + CppBlockPtr getReadBlock(const std::string& cppAccessor, const std::string& variantAccessor) const final; + + private: + bool isDtoReplacedObject = false; }; } diff --git a/source/RobotAPI/libraries/aron/core/codegenerator/codewriter/cpp/generator/container/Pair.cpp b/source/RobotAPI/libraries/aron/codegeneration/codegenerator/codewriter/cpp/generator/container/Pair.cpp similarity index 100% rename from source/RobotAPI/libraries/aron/core/codegenerator/codewriter/cpp/generator/container/Pair.cpp rename to source/RobotAPI/libraries/aron/codegeneration/codegenerator/codewriter/cpp/generator/container/Pair.cpp diff --git a/source/RobotAPI/libraries/aron/core/codegenerator/codewriter/cpp/generator/container/Pair.h b/source/RobotAPI/libraries/aron/codegeneration/codegenerator/codewriter/cpp/generator/container/Pair.h similarity index 82% rename from source/RobotAPI/libraries/aron/core/codegenerator/codewriter/cpp/generator/container/Pair.h rename to source/RobotAPI/libraries/aron/codegeneration/codegenerator/codewriter/cpp/generator/container/Pair.h index 5d91ba10b..f37087d03 100644 --- a/source/RobotAPI/libraries/aron/core/codegenerator/codewriter/cpp/generator/container/Pair.h +++ b/source/RobotAPI/libraries/aron/codegeneration/codegenerator/codewriter/cpp/generator/container/Pair.h @@ -24,7 +24,7 @@ #pragma once #include <RobotAPI/libraries/aron/core/type/variant/container/Pair.h> -#include <RobotAPI/libraries/aron/core/codegenerator/codewriter/cpp/generator/detail/ContainerGenerator.h> +#include <RobotAPI/libraries/aron/codegeneration/codegenerator/codewriter/cpp/generator/detail/ContainerGenerator.h> namespace armarx::aron::codegenerator::cpp::generator @@ -38,10 +38,10 @@ namespace armarx::aron::codegenerator::cpp::generator virtual ~Pair() = default; // virtual implementations - std::vector<std::string> getRequiredIncludes() const override; - CppBlockPtr getResetSoftBlock(const std::string& cppAccessor) const override; - CppBlockPtr getWriteTypeBlock(const std::string& typeAccessor, const std::string& cppAccessor, const Path&, std::string& variantAccessor) const override; - CppBlockPtr getWriteBlock(const std::string& cppAccessor, const Path&, std::string& variantAccessor) const override; - CppBlockPtr getReadBlock(const std::string& cppAccessor, const std::string& variantAccessor) const override; + std::vector<std::string> getRequiredIncludes() const final; + CppBlockPtr getResetSoftBlock(const std::string& cppAccessor) const final; + CppBlockPtr getWriteTypeBlock(const std::string& typeAccessor, const std::string& cppAccessor, const Path&, std::string& variantAccessor) const final; + CppBlockPtr getWriteBlock(const std::string& cppAccessor, const Path&, std::string& variantAccessor) const final; + CppBlockPtr getReadBlock(const std::string& cppAccessor, const std::string& variantAccessor) const final; }; } diff --git a/source/RobotAPI/libraries/aron/core/codegenerator/codewriter/cpp/generator/container/Tuple.cpp b/source/RobotAPI/libraries/aron/codegeneration/codegenerator/codewriter/cpp/generator/container/Tuple.cpp similarity index 100% rename from source/RobotAPI/libraries/aron/core/codegenerator/codewriter/cpp/generator/container/Tuple.cpp rename to source/RobotAPI/libraries/aron/codegeneration/codegenerator/codewriter/cpp/generator/container/Tuple.cpp diff --git a/source/RobotAPI/libraries/aron/core/codegenerator/codewriter/cpp/generator/container/Tuple.h b/source/RobotAPI/libraries/aron/codegeneration/codegenerator/codewriter/cpp/generator/container/Tuple.h similarity index 82% rename from source/RobotAPI/libraries/aron/core/codegenerator/codewriter/cpp/generator/container/Tuple.h rename to source/RobotAPI/libraries/aron/codegeneration/codegenerator/codewriter/cpp/generator/container/Tuple.h index e7ddafebf..52e565e89 100644 --- a/source/RobotAPI/libraries/aron/core/codegenerator/codewriter/cpp/generator/container/Tuple.h +++ b/source/RobotAPI/libraries/aron/codegeneration/codegenerator/codewriter/cpp/generator/container/Tuple.h @@ -24,7 +24,7 @@ #pragma once #include <RobotAPI/libraries/aron/core/type/variant/container/Tuple.h> -#include <RobotAPI/libraries/aron/core/codegenerator/codewriter/cpp/generator/detail/ContainerGenerator.h> +#include <RobotAPI/libraries/aron/codegeneration/codegenerator/codewriter/cpp/generator/detail/ContainerGenerator.h> namespace armarx::aron::codegenerator::cpp::generator @@ -38,10 +38,10 @@ namespace armarx::aron::codegenerator::cpp::generator virtual ~Tuple() = default; // virtual implementations - std::vector<std::string> getRequiredIncludes() const override; - CppBlockPtr getResetSoftBlock(const std::string& cppAccessor) const override; - CppBlockPtr getWriteTypeBlock(const std::string& typeAccessor, const std::string& cppAccessor, const Path&, std::string& variantAccessor) const override; - CppBlockPtr getWriteBlock(const std::string& cppAccessor, const Path&, std::string& variantAccessor) const override; - CppBlockPtr getReadBlock(const std::string& cppAccessor, const std::string& variantAccessor) const override; + std::vector<std::string> getRequiredIncludes() const final; + CppBlockPtr getResetSoftBlock(const std::string& cppAccessor) const final; + CppBlockPtr getWriteTypeBlock(const std::string& typeAccessor, const std::string& cppAccessor, const Path&, std::string& variantAccessor) const final; + CppBlockPtr getWriteBlock(const std::string& cppAccessor, const Path&, std::string& variantAccessor) const final; + CppBlockPtr getReadBlock(const std::string& cppAccessor, const std::string& variantAccessor) const final; }; } diff --git a/source/RobotAPI/libraries/aron/core/codegenerator/codewriter/cpp/generator/detail/AnyGenerator.cpp b/source/RobotAPI/libraries/aron/codegeneration/codegenerator/codewriter/cpp/generator/detail/AnyGenerator.cpp similarity index 100% rename from source/RobotAPI/libraries/aron/core/codegenerator/codewriter/cpp/generator/detail/AnyGenerator.cpp rename to source/RobotAPI/libraries/aron/codegeneration/codegenerator/codewriter/cpp/generator/detail/AnyGenerator.cpp diff --git a/source/RobotAPI/libraries/aron/core/codegenerator/codewriter/cpp/generator/detail/DtoGenerator.h b/source/RobotAPI/libraries/aron/codegeneration/codegenerator/codewriter/cpp/generator/detail/AnyGenerator.h similarity index 94% rename from source/RobotAPI/libraries/aron/core/codegenerator/codewriter/cpp/generator/detail/DtoGenerator.h rename to source/RobotAPI/libraries/aron/codegeneration/codegenerator/codewriter/cpp/generator/detail/AnyGenerator.h index 792c10ec7..5260c3407 100644 --- a/source/RobotAPI/libraries/aron/core/codegenerator/codewriter/cpp/generator/detail/DtoGenerator.h +++ b/source/RobotAPI/libraries/aron/codegeneration/codegenerator/codewriter/cpp/generator/detail/AnyGenerator.h @@ -31,11 +31,11 @@ namespace armarx::aron::codegenerator::cpp::generator::detail { template<typename typeT, typename DerivedT> - class DtoGenerator : + class AnyGenerator : public SpecializedGeneratorBase<typeT, DerivedT> { public: using SpecializedGeneratorBase<typeT, DerivedT>::SpecializedGeneratorBase; - virtual ~DtoGenerator() = default; + virtual ~AnyGenerator() = default; }; } diff --git a/source/RobotAPI/libraries/aron/core/codegenerator/codewriter/cpp/generator/detail/ContainerGenerator.cpp b/source/RobotAPI/libraries/aron/codegeneration/codegenerator/codewriter/cpp/generator/detail/ContainerGenerator.cpp similarity index 100% rename from source/RobotAPI/libraries/aron/core/codegenerator/codewriter/cpp/generator/detail/ContainerGenerator.cpp rename to source/RobotAPI/libraries/aron/codegeneration/codegenerator/codewriter/cpp/generator/detail/ContainerGenerator.cpp diff --git a/source/RobotAPI/libraries/aron/core/codegenerator/codewriter/cpp/generator/detail/ContainerGenerator.h b/source/RobotAPI/libraries/aron/codegeneration/codegenerator/codewriter/cpp/generator/detail/ContainerGenerator.h similarity index 100% rename from source/RobotAPI/libraries/aron/core/codegenerator/codewriter/cpp/generator/detail/ContainerGenerator.h rename to source/RobotAPI/libraries/aron/codegeneration/codegenerator/codewriter/cpp/generator/detail/ContainerGenerator.h diff --git a/source/RobotAPI/libraries/aron/core/codegenerator/codewriter/cpp/generator/detail/NDArrayGenerator.cpp b/source/RobotAPI/libraries/aron/codegeneration/codegenerator/codewriter/cpp/generator/detail/NDArrayGenerator.cpp similarity index 100% rename from source/RobotAPI/libraries/aron/core/codegenerator/codewriter/cpp/generator/detail/NDArrayGenerator.cpp rename to source/RobotAPI/libraries/aron/codegeneration/codegenerator/codewriter/cpp/generator/detail/NDArrayGenerator.cpp diff --git a/source/RobotAPI/libraries/aron/core/codegenerator/codewriter/cpp/generator/detail/NDArrayGenerator.h b/source/RobotAPI/libraries/aron/codegeneration/codegenerator/codewriter/cpp/generator/detail/NDArrayGenerator.h similarity index 100% rename from source/RobotAPI/libraries/aron/core/codegenerator/codewriter/cpp/generator/detail/NDArrayGenerator.h rename to source/RobotAPI/libraries/aron/codegeneration/codegenerator/codewriter/cpp/generator/detail/NDArrayGenerator.h diff --git a/source/RobotAPI/libraries/aron/core/codegenerator/codewriter/cpp/generator/detail/PrimitiveGenerator.cpp b/source/RobotAPI/libraries/aron/codegeneration/codegenerator/codewriter/cpp/generator/detail/PrimitiveGenerator.cpp similarity index 100% rename from source/RobotAPI/libraries/aron/core/codegenerator/codewriter/cpp/generator/detail/PrimitiveGenerator.cpp rename to source/RobotAPI/libraries/aron/codegeneration/codegenerator/codewriter/cpp/generator/detail/PrimitiveGenerator.cpp diff --git a/source/RobotAPI/libraries/aron/core/codegenerator/codewriter/cpp/generator/detail/PrimitiveGenerator.h b/source/RobotAPI/libraries/aron/codegeneration/codegenerator/codewriter/cpp/generator/detail/PrimitiveGenerator.h similarity index 100% rename from source/RobotAPI/libraries/aron/core/codegenerator/codewriter/cpp/generator/detail/PrimitiveGenerator.h rename to source/RobotAPI/libraries/aron/codegeneration/codegenerator/codewriter/cpp/generator/detail/PrimitiveGenerator.h diff --git a/source/RobotAPI/libraries/aron/core/codegenerator/codewriter/cpp/generator/detail/SpecializedGenerator.cpp b/source/RobotAPI/libraries/aron/codegeneration/codegenerator/codewriter/cpp/generator/detail/SpecializedGenerator.cpp similarity index 100% rename from source/RobotAPI/libraries/aron/core/codegenerator/codewriter/cpp/generator/detail/SpecializedGenerator.cpp rename to source/RobotAPI/libraries/aron/codegeneration/codegenerator/codewriter/cpp/generator/detail/SpecializedGenerator.cpp diff --git a/source/RobotAPI/libraries/aron/core/codegenerator/codewriter/cpp/generator/detail/SpecializedGenerator.h b/source/RobotAPI/libraries/aron/codegeneration/codegenerator/codewriter/cpp/generator/detail/SpecializedGenerator.h similarity index 94% rename from source/RobotAPI/libraries/aron/core/codegenerator/codewriter/cpp/generator/detail/SpecializedGenerator.h rename to source/RobotAPI/libraries/aron/codegeneration/codegenerator/codewriter/cpp/generator/detail/SpecializedGenerator.h index 8df5c01fc..ba487310e 100644 --- a/source/RobotAPI/libraries/aron/core/codegenerator/codewriter/cpp/generator/detail/SpecializedGenerator.h +++ b/source/RobotAPI/libraries/aron/codegeneration/codegenerator/codewriter/cpp/generator/detail/SpecializedGenerator.h @@ -23,7 +23,7 @@ #pragma once -#include <RobotAPI/libraries/aron/core/codegenerator/codewriter/cpp/generator/Generator.h> +#include <RobotAPI/libraries/aron/codegeneration/codegenerator/codewriter/cpp/generator/Generator.h> #include <memory> #include <string> diff --git a/source/RobotAPI/libraries/aron/core/codegenerator/codewriter/cpp/generator/enum/All.h b/source/RobotAPI/libraries/aron/codegeneration/codegenerator/codewriter/cpp/generator/enum/All.h similarity index 100% rename from source/RobotAPI/libraries/aron/core/codegenerator/codewriter/cpp/generator/enum/All.h rename to source/RobotAPI/libraries/aron/codegeneration/codegenerator/codewriter/cpp/generator/enum/All.h diff --git a/source/RobotAPI/libraries/aron/core/codegenerator/codewriter/cpp/generator/enum/IntEnum.cpp b/source/RobotAPI/libraries/aron/codegeneration/codegenerator/codewriter/cpp/generator/enum/IntEnum.cpp similarity index 98% rename from source/RobotAPI/libraries/aron/core/codegenerator/codewriter/cpp/generator/enum/IntEnum.cpp rename to source/RobotAPI/libraries/aron/codegeneration/codegenerator/codewriter/cpp/generator/enum/IntEnum.cpp index 3c9fa87f1..c818db64a 100644 --- a/source/RobotAPI/libraries/aron/core/codegenerator/codewriter/cpp/generator/enum/IntEnum.cpp +++ b/source/RobotAPI/libraries/aron/codegeneration/codegenerator/codewriter/cpp/generator/enum/IntEnum.cpp @@ -49,7 +49,7 @@ namespace armarx::aron::codegenerator::cpp::generator CppBlockPtr IntEnum::getResetHardBlock(const std::string& accessor) const { CppBlockPtr b = std::make_shared<CppBlock>(); - if (type.getMaybe() != type::Maybe::eNone) + if (type.getMaybe() != type::Maybe::NONE) { b->addLine(accessor + " = {};"); } diff --git a/source/RobotAPI/libraries/aron/core/codegenerator/codewriter/cpp/generator/enum/IntEnum.h b/source/RobotAPI/libraries/aron/codegeneration/codegenerator/codewriter/cpp/generator/enum/IntEnum.h similarity index 85% rename from source/RobotAPI/libraries/aron/core/codegenerator/codewriter/cpp/generator/enum/IntEnum.h rename to source/RobotAPI/libraries/aron/codegeneration/codegenerator/codewriter/cpp/generator/enum/IntEnum.h index f472129d9..cd5b36bce 100644 --- a/source/RobotAPI/libraries/aron/core/codegenerator/codewriter/cpp/generator/enum/IntEnum.h +++ b/source/RobotAPI/libraries/aron/codegeneration/codegenerator/codewriter/cpp/generator/enum/IntEnum.h @@ -23,7 +23,7 @@ #pragma once -#include <RobotAPI/libraries/aron/core/codegenerator/codewriter/cpp/generator/detail/SpecializedGenerator.h> +#include <RobotAPI/libraries/aron/codegeneration/codegenerator/codewriter/cpp/generator/detail/SpecializedGenerator.h> #include <RobotAPI/libraries/aron/core/type/variant/enum/IntEnum.h> #include <map> @@ -44,10 +44,10 @@ namespace armarx::aron::codegenerator::cpp::generator virtual ~IntEnum() = default; // virtual implementations - CppBlockPtr getResetHardBlock(const std::string& cppAccessor) const override; - CppBlockPtr getResetSoftBlock(const std::string& cppAccessor) const override; - CppBlockPtr getWriteTypeBlock(const std::string& typeAccessor, const std::string& cppAccessor, const Path&, std::string& variantAccessor) const override; - CppBlockPtr getWriteBlock(const std::string& cppAccessor, const Path&, std::string& variantAccessor) const override; - CppBlockPtr getReadBlock(const std::string& cppAccessor, const std::string& variantAccessor) const override; + CppBlockPtr getResetHardBlock(const std::string& cppAccessor) const final; + CppBlockPtr getResetSoftBlock(const std::string& cppAccessor) const final; + CppBlockPtr getWriteTypeBlock(const std::string& typeAccessor, const std::string& cppAccessor, const Path&, std::string& variantAccessor) const final; + CppBlockPtr getWriteBlock(const std::string& cppAccessor, const Path&, std::string& variantAccessor) const final; + CppBlockPtr getReadBlock(const std::string& cppAccessor, const std::string& variantAccessor) const final; }; } diff --git a/source/RobotAPI/libraries/aron/core/codegenerator/codewriter/cpp/generator/ndarray/All.h b/source/RobotAPI/libraries/aron/codegeneration/codegenerator/codewriter/cpp/generator/ndarray/All.h similarity index 100% rename from source/RobotAPI/libraries/aron/core/codegenerator/codewriter/cpp/generator/ndarray/All.h rename to source/RobotAPI/libraries/aron/codegeneration/codegenerator/codewriter/cpp/generator/ndarray/All.h diff --git a/source/RobotAPI/libraries/aron/core/codegenerator/codewriter/cpp/generator/ndarray/Image.cpp b/source/RobotAPI/libraries/aron/codegeneration/codegenerator/codewriter/cpp/generator/ndarray/Image.cpp similarity index 91% rename from source/RobotAPI/libraries/aron/core/codegenerator/codewriter/cpp/generator/ndarray/Image.cpp rename to source/RobotAPI/libraries/aron/codegeneration/codegenerator/codewriter/cpp/generator/ndarray/Image.cpp index 3543f59e4..aae1c701a 100644 --- a/source/RobotAPI/libraries/aron/core/codegenerator/codewriter/cpp/generator/ndarray/Image.cpp +++ b/source/RobotAPI/libraries/aron/codegeneration/codegenerator/codewriter/cpp/generator/ndarray/Image.cpp @@ -29,10 +29,10 @@ namespace armarx::aron::codegenerator::cpp::generator { - const std::map<type::image::PixelType, std::pair<std::string, int>> Image::PixelType2Cpp = + const std::map<type::image::PixelType, std::tuple<std::string, int, std::string>> PixelType2Cpp = { - { type::image::PixelType::rgb24, {"CV_8UC3", 3}}, - { type::image::PixelType::depth32, {"CV_32FC1", 4}}, + { type::image::PixelType::RGB24, {"CV_8UC3", 3, "::armarx::aron::type::image::PixelType::RGB24"}}, + { type::image::PixelType::DEPTH32, {"CV_32FC1", 4, "::armarx::aron::type::image::PixelType::DEPTH32"}}, }; @@ -55,7 +55,7 @@ namespace armarx::aron::codegenerator::cpp::generator CppBlockPtr Image::getResetHardBlock(const std::string& cppAccessor) const { CppBlockPtr block_if_data = detail::NDArrayGenerator<type::Image, Image>::getResetHardBlock(cppAccessor); - block_if_data->addLine(cppAccessor + ".create(0, 0, " + PixelType2Cpp.at(type.getPixelType()).first + ");"); + block_if_data->addLine(cppAccessor + ".create(0, 0, " + std::get<0>(PixelType2Cpp.at(type.getPixelType())) + ");"); return this->resolveMaybeResetSoftBlock(block_if_data, cppAccessor); } @@ -63,7 +63,7 @@ namespace armarx::aron::codegenerator::cpp::generator CppBlockPtr Image::getResetSoftBlock(const std::string& cppAccessor) const { CppBlockPtr block_if_data = std::make_shared<CppBlock>(); - block_if_data->addLine(cppAccessor + ".create(0, 0, " + PixelType2Cpp.at(type.getPixelType()).first + ");"); + block_if_data->addLine(cppAccessor + ".create(0, 0, " + std::get<0>(PixelType2Cpp.at(type.getPixelType())) + ");"); return this->resolveMaybeResetSoftBlock(block_if_data, cppAccessor); } @@ -74,7 +74,7 @@ namespace armarx::aron::codegenerator::cpp::generator std::string escaped_accessor = EscapeAccessor(cppAccessor); variantAccessor = ARON_VARIANT_RETURN_ACCESSOR + "_" + escaped_accessor; - b->addLine("auto " + variantAccessor + " = " + ARON_WRITER_ACCESSOR + ".writeImage(" + conversion::PixelType2CppString.at(type.getPixelType()) + ", " + + b->addLine("auto " + variantAccessor + " = " + ARON_WRITER_ACCESSOR + ".writeImage(" + std::get<2>(PixelType2Cpp.at(type.getPixelType())) + ", " + conversion::Maybe2CppString.at(type.getMaybe()) + ", " + "armarx::aron::Path("+ARON_PATH_ACCESSOR+", {"+simox::alg::join(p.getPath(), ", ")+"})); // of " + cppAccessor); return b; diff --git a/source/RobotAPI/libraries/aron/core/codegenerator/codewriter/cpp/generator/ndarray/Image.h b/source/RobotAPI/libraries/aron/codegeneration/codegenerator/codewriter/cpp/generator/ndarray/Image.h similarity index 75% rename from source/RobotAPI/libraries/aron/core/codegenerator/codewriter/cpp/generator/ndarray/Image.h rename to source/RobotAPI/libraries/aron/codegeneration/codegenerator/codewriter/cpp/generator/ndarray/Image.h index 8cee1dc26..72f6947c9 100644 --- a/source/RobotAPI/libraries/aron/core/codegenerator/codewriter/cpp/generator/ndarray/Image.h +++ b/source/RobotAPI/libraries/aron/codegeneration/codegenerator/codewriter/cpp/generator/ndarray/Image.h @@ -23,7 +23,7 @@ #pragma once -#include <RobotAPI/libraries/aron/core/codegenerator/codewriter/cpp/generator/detail/NDArrayGenerator.h> +#include <RobotAPI/libraries/aron/codegeneration/codegenerator/codewriter/cpp/generator/detail/NDArrayGenerator.h> #include <RobotAPI/libraries/aron/core/type/variant/ndarray/Image.h> #include <map> @@ -42,17 +42,13 @@ namespace armarx::aron::codegenerator::cpp::generator virtual ~Image() = default; // virtual implementations - std::vector<std::string> getRequiredIncludes() const override; - CppBlockPtr getResetHardBlock(const std::string& cppAccessor) const override; - CppBlockPtr getResetSoftBlock(const std::string& cppAccessor) const override; - CppBlockPtr getWriteTypeBlock(const std::string& typeAccessor, const std::string& cppAccessor, const Path&, std::string& variantAccessor) const override; - CppBlockPtr getWriteBlock(const std::string& cppAccessor, const Path&, std::string& variantAccessor) const override; - CppBlockPtr getReadBlock(const std::string& cppAccessor, const std::string& variantAccessor) const override; - CppBlockPtr getEqualsBlock(const std::string&, const std::string&) const override; - - public: - /// Maps ARON pixel types to OpenCV image type constants. - static const std::map<type::image::PixelType, std::pair<std::string, int>> PixelType2Cpp; + std::vector<std::string> getRequiredIncludes() const final; + CppBlockPtr getResetHardBlock(const std::string& cppAccessor) const final; + CppBlockPtr getResetSoftBlock(const std::string& cppAccessor) const final; + CppBlockPtr getWriteTypeBlock(const std::string& typeAccessor, const std::string& cppAccessor, const Path&, std::string& variantAccessor) const final; + CppBlockPtr getWriteBlock(const std::string& cppAccessor, const Path&, std::string& variantAccessor) const final; + CppBlockPtr getReadBlock(const std::string& cppAccessor, const std::string& variantAccessor) const final; + CppBlockPtr getEqualsBlock(const std::string&, const std::string&) const final; }; diff --git a/source/RobotAPI/libraries/aron/core/codegenerator/codewriter/cpp/generator/ndarray/Matrix.cpp b/source/RobotAPI/libraries/aron/codegeneration/codegenerator/codewriter/cpp/generator/ndarray/Matrix.cpp similarity index 79% rename from source/RobotAPI/libraries/aron/core/codegenerator/codewriter/cpp/generator/ndarray/Matrix.cpp rename to source/RobotAPI/libraries/aron/codegeneration/codegenerator/codewriter/cpp/generator/ndarray/Matrix.cpp index d32f00c4b..2fbfad0e8 100644 --- a/source/RobotAPI/libraries/aron/core/codegenerator/codewriter/cpp/generator/ndarray/Matrix.cpp +++ b/source/RobotAPI/libraries/aron/codegeneration/codegenerator/codewriter/cpp/generator/ndarray/Matrix.cpp @@ -29,21 +29,20 @@ namespace armarx::aron::codegenerator::cpp::generator { - - const std::map<type::matrix::ElementType, std::pair<std::string, int>> Matrix::ElementType2Cpp = + const std::map<type::matrix::ElementType, std::tuple<std::string, int, std::string>> ElementType2Cpp = { - {type::matrix::int16, {"short", 2}}, - {type::matrix::int32, {"int", 4}}, - {type::matrix::int64, {"long", 8}}, - {type::matrix::float32, {"float", 4}}, - {type::matrix::float64, {"double", 8}} + {type::matrix::INT16, {"short", 2, "::armarx::aron::type::matrix::INT16"}}, + {type::matrix::INT32, {"int", 4, "::armarx::aron::type::matrix::INT32"}}, + {type::matrix::INT64, {"long", 8, "::armarx::aron::type::matrix::INT64"}}, + {type::matrix::FLOAT32, {"float", 4, "::armarx::aron::type::matrix::FLOAT32"}}, + {type::matrix::FLOAT64, {"double", 8, "::armarx::aron::type::matrix::FLOAT64"}} }; // constructors Matrix::Matrix(const type::Matrix& n) : detail::NDArrayGenerator<type::Matrix, Matrix>( - "Eigen::Matrix<" + ElementType2Cpp.at(n.getElementType()).first + ", " + (n.getRows() == -1 ? "Eigen::Dynamic" : std::to_string(n.getRows())) + ", " + (n.getCols() == -1 ? "Eigen::Dynamic" : std::to_string(n.getCols())) + ">", - "Eigen::Matrix<" + ElementType2Cpp.at(n.getElementType()).first + ", " + (n.getRows() == -1 ? "Eigen::Dynamic" : std::to_string(n.getRows())) + ", " + (n.getCols() == -1 ? "Eigen::Dynamic" : std::to_string(n.getCols())) + ">", + "Eigen::Matrix<" + std::get<0>(ElementType2Cpp.at(n.getElementType())) + ", " + (n.getRows() == -1 ? "Eigen::Dynamic" : std::to_string(n.getRows())) + ", " + (n.getCols() == -1 ? "Eigen::Dynamic" : std::to_string(n.getCols())) + ">", + "Eigen::Matrix<" + std::get<0>(ElementType2Cpp.at(n.getElementType())) + ", " + (n.getRows() == -1 ? "Eigen::Dynamic" : std::to_string(n.getRows())) + ", " + (n.getCols() == -1 ? "Eigen::Dynamic" : std::to_string(n.getCols())) + ">", simox::meta::get_type_name<data::dto::NDArray>(), simox::meta::get_type_name<type::dto::Matrix>(), n) { @@ -68,7 +67,7 @@ namespace armarx::aron::codegenerator::cpp::generator variantAccessor = ARON_VARIANT_RETURN_ACCESSOR + "_" + escaped_accessor; b->addLine("auto " + variantAccessor + " = " + ARON_WRITER_ACCESSOR + ".writeMatrix((int) " + std::to_string(type.getRows()) + ", " + "(int) " + std::to_string(type.getCols()) + ", " + - conversion::MatrixElementType2CppString.at(type.getElementType()) + ", " + + std::get<2>(ElementType2Cpp.at(type.getElementType())) + ", " + conversion::Maybe2CppString.at(type.getMaybe()) + ", " + "armarx::aron::Path("+ARON_PATH_ACCESSOR+", {"+simox::alg::join(p.getPath(), ", ")+"})); // of " + cppAccessor); @@ -83,8 +82,8 @@ namespace armarx::aron::codegenerator::cpp::generator block_if_data->addLine(variantAccessor + " = " + ARON_WRITER_ACCESSOR + ".writeNDArray({(int) " + cppAccessor + nextEl() + "rows(), "+ "(int) " + cppAccessor + nextEl() + "cols(), " + - std::to_string(ElementType2Cpp.at(type.getElementType()).second) + "}, "+ - "\"" + ElementType2Cpp.at(type.getElementType()).first + "\", "+ + std::to_string(std::get<1>(ElementType2Cpp.at(type.getElementType()))) + "}, "+ + "\"" + std::get<0>(ElementType2Cpp.at(type.getElementType())) + "\", "+ "reinterpret_cast<const unsigned char*>(" + cppAccessor + nextEl() + "data()), " + "armarx::aron::Path("+ARON_PATH_ACCESSOR+", {" + simox::alg::join(p.getPath(), ", ") + "})); // of " + cppAccessor); diff --git a/source/RobotAPI/libraries/aron/core/codegenerator/codewriter/cpp/generator/ndarray/Matrix.h b/source/RobotAPI/libraries/aron/codegeneration/codegenerator/codewriter/cpp/generator/ndarray/Matrix.h similarity index 77% rename from source/RobotAPI/libraries/aron/core/codegenerator/codewriter/cpp/generator/ndarray/Matrix.h rename to source/RobotAPI/libraries/aron/codegeneration/codegenerator/codewriter/cpp/generator/ndarray/Matrix.h index 881010796..9f56f2b98 100644 --- a/source/RobotAPI/libraries/aron/core/codegenerator/codewriter/cpp/generator/ndarray/Matrix.h +++ b/source/RobotAPI/libraries/aron/codegeneration/codegenerator/codewriter/cpp/generator/ndarray/Matrix.h @@ -23,7 +23,7 @@ #pragma once -#include <RobotAPI/libraries/aron/core/codegenerator/codewriter/cpp/generator/detail/NDArrayGenerator.h> +#include <RobotAPI/libraries/aron/codegeneration/codegenerator/codewriter/cpp/generator/detail/NDArrayGenerator.h> #include <RobotAPI/libraries/aron/core/type/variant/ndarray/Matrix.h> #include <map> @@ -41,14 +41,11 @@ namespace armarx::aron::codegenerator::cpp::generator virtual ~Matrix() = default; // virtual implementations - std::vector<std::string> getRequiredIncludes() const override; - CppBlockPtr getResetSoftBlock(const std::string& cppAccessor) const override; - CppBlockPtr getWriteTypeBlock(const std::string& typeAccessor, const std::string& cppAccessor, const Path&, std::string& variantAccessor) const override; - CppBlockPtr getWriteBlock(const std::string& cppAccessor, const Path&, std::string& variantAccessor) const override; - CppBlockPtr getReadBlock(const std::string& cppAccessor, const std::string& variantAccessor) const override; - CppBlockPtr getEqualsBlock(const std::string&, const std::string&) const override; - - public: - static const std::map<type::matrix::ElementType, std::pair<std::string, int>> ElementType2Cpp; + std::vector<std::string> getRequiredIncludes() const final; + CppBlockPtr getResetSoftBlock(const std::string& cppAccessor) const final; + CppBlockPtr getWriteTypeBlock(const std::string& typeAccessor, const std::string& cppAccessor, const Path&, std::string& variantAccessor) const final; + CppBlockPtr getWriteBlock(const std::string& cppAccessor, const Path&, std::string& variantAccessor) const final; + CppBlockPtr getReadBlock(const std::string& cppAccessor, const std::string& variantAccessor) const final; + CppBlockPtr getEqualsBlock(const std::string&, const std::string&) const final; }; } diff --git a/source/RobotAPI/libraries/aron/core/codegenerator/codewriter/cpp/generator/ndarray/NDArray.cpp b/source/RobotAPI/libraries/aron/codegeneration/codegenerator/codewriter/cpp/generator/ndarray/NDArray.cpp similarity index 100% rename from source/RobotAPI/libraries/aron/core/codegenerator/codewriter/cpp/generator/ndarray/NDArray.cpp rename to source/RobotAPI/libraries/aron/codegeneration/codegenerator/codewriter/cpp/generator/ndarray/NDArray.cpp diff --git a/source/RobotAPI/libraries/aron/core/codegenerator/codewriter/cpp/generator/ndarray/NDArray.h b/source/RobotAPI/libraries/aron/codegeneration/codegenerator/codewriter/cpp/generator/ndarray/NDArray.h similarity index 85% rename from source/RobotAPI/libraries/aron/core/codegenerator/codewriter/cpp/generator/ndarray/NDArray.h rename to source/RobotAPI/libraries/aron/codegeneration/codegenerator/codewriter/cpp/generator/ndarray/NDArray.h index 428ca861d..3b1d3d2cc 100644 --- a/source/RobotAPI/libraries/aron/core/codegenerator/codewriter/cpp/generator/ndarray/NDArray.h +++ b/source/RobotAPI/libraries/aron/codegeneration/codegenerator/codewriter/cpp/generator/ndarray/NDArray.h @@ -23,7 +23,7 @@ #pragma once -#include <RobotAPI/libraries/aron/core/codegenerator/codewriter/cpp/generator/detail/NDArrayGenerator.h> +#include <RobotAPI/libraries/aron/codegeneration/codegenerator/codewriter/cpp/generator/detail/NDArrayGenerator.h> #include <RobotAPI/libraries/aron/core/type/variant/ndarray/NDArray.h> #include <string> @@ -41,9 +41,9 @@ namespace armarx::aron::codegenerator::cpp::generator virtual ~NDArray() = default; // virtual implementations - CppBlockPtr getResetSoftBlock(const std::string& cppAccessor) const override; - CppBlockPtr getWriteTypeBlock(const std::string& typeAccessor, const std::string& cppAccessor, const Path&, std::string& variantAccessor) const override; - CppBlockPtr getWriteBlock(const std::string& cppAccessor, const Path&, std::string& variantAccessor) const override; - CppBlockPtr getReadBlock(const std::string& cppAccessor, const std::string& variantAccessor) const override; + CppBlockPtr getResetSoftBlock(const std::string& cppAccessor) const final; + CppBlockPtr getWriteTypeBlock(const std::string& typeAccessor, const std::string& cppAccessor, const Path&, std::string& variantAccessor) const final; + CppBlockPtr getWriteBlock(const std::string& cppAccessor, const Path&, std::string& variantAccessor) const final; + CppBlockPtr getReadBlock(const std::string& cppAccessor, const std::string& variantAccessor) const final; }; } diff --git a/source/RobotAPI/libraries/aron/core/codegenerator/codewriter/cpp/generator/ndarray/PointCloud.cpp b/source/RobotAPI/libraries/aron/codegeneration/codegenerator/codewriter/cpp/generator/ndarray/PointCloud.cpp similarity index 77% rename from source/RobotAPI/libraries/aron/core/codegenerator/codewriter/cpp/generator/ndarray/PointCloud.cpp rename to source/RobotAPI/libraries/aron/codegeneration/codegenerator/codewriter/cpp/generator/ndarray/PointCloud.cpp index fa5cf35b9..78e42fe08 100644 --- a/source/RobotAPI/libraries/aron/core/codegenerator/codewriter/cpp/generator/ndarray/PointCloud.cpp +++ b/source/RobotAPI/libraries/aron/codegeneration/codegenerator/codewriter/cpp/generator/ndarray/PointCloud.cpp @@ -29,24 +29,23 @@ namespace armarx::aron::codegenerator::cpp::generator { - - const std::map<type::pointcloud::VoxelType, std::pair<std::string, int>> PointCloud::VoxelType2Cpp = + const std::map<type::pointcloud::VoxelType, std::tuple<std::string, int, std::string>> VoxelType2Cpp = { // see http://docs.ros.org/en/groovy/api/pcl/html/point__types_8hpp_source.html - {type::pointcloud::VoxelType::PointXYZ, {"pcl::PointXYZ", 16}}, - {type::pointcloud::VoxelType::PointXYZI, {"pcl::PointXYZI", 32}}, - {type::pointcloud::VoxelType::PointXYZL, {"pcl::PointXYZL", 32}}, - {type::pointcloud::VoxelType::PointXYZRGB, {"pcl::PointXYZRGB", 32}}, - {type::pointcloud::VoxelType::PointXYZRGBL, {"pcl::PointXYZRGBL", 32}}, - {type::pointcloud::VoxelType::PointXYZRGBA, {"pcl::PointXYZRGBA", 32}}, - {type::pointcloud::VoxelType::PointXYZHSV, {"pcl::PointXYZHSV", 32}} + {type::pointcloud::VoxelType::POINT_XYZ, {"pcl::PointXYZ", 16, "::armarx::aron::type::pointcloud::VoxelType::POINT_XYZ"}}, + {type::pointcloud::VoxelType::POINT_XYZI, {"pcl::PointXYZI", 32, "::armarx::aron::type::pointcloud::VoxelType::POINT_XYZI"}}, + {type::pointcloud::VoxelType::POINT_XYZL, {"pcl::PointXYZL", 32, "::armarx::aron::type::pointcloud::VoxelType::POINT_XYZL"}}, + {type::pointcloud::VoxelType::POINT_XYZRGB, {"pcl::PointXYZRGB", 32, "::armarx::aron::type::pointcloud::VoxelType::POINT_XYZRGB"}}, + {type::pointcloud::VoxelType::POINT_XYZRGBL, {"pcl::PointXYZRGBL", 32, "::armarx::aron::type::pointcloud::VoxelType::POINT_XYZRGBL"}}, + {type::pointcloud::VoxelType::POINT_XYZRGBA, {"pcl::PointXYZRGBA", 32, "::armarx::aron::type::pointcloud::VoxelType::POINT_XYZRGBA"}}, + {type::pointcloud::VoxelType::POINT_XYZHSV, {"pcl::PointXYZHSV", 32, "::armarx::aron::type::pointcloud::VoxelType::POINT_XYZHSV"}} }; // constructors PointCloud::PointCloud(const type::PointCloud& n) : detail::NDArrayGenerator<type::PointCloud, PointCloud>( - "pcl::PointCloud<" + VoxelType2Cpp.at(n.getVoxelType()).first + ">", - "pcl::PointCloud<" + VoxelType2Cpp.at(n.getVoxelType()).first + ">", + "pcl::PointCloud<" + std::get<0>(VoxelType2Cpp.at(n.getVoxelType())) + ">", + "pcl::PointCloud<" + std::get<0>(VoxelType2Cpp.at(n.getVoxelType())) + ">", simox::meta::get_type_name<data::dto::NDArray>(), simox::meta::get_type_name<type::dto::PointCloud>(), n) @@ -71,7 +70,7 @@ namespace armarx::aron::codegenerator::cpp::generator std::string escaped_accessor = EscapeAccessor(cppAccessor); variantAccessor = ARON_VARIANT_RETURN_ACCESSOR + "_" + escaped_accessor; - b->addLine("auto " + variantAccessor + " = " + ARON_WRITER_ACCESSOR + ".writePointCloud(" + conversion::VoxelType2CppString.at(type.getVoxelType()) + ", " + + b->addLine("auto " + variantAccessor + " = " + ARON_WRITER_ACCESSOR + ".writePointCloud(" + std::get<2>(VoxelType2Cpp.at(type.getVoxelType())) + ", " + conversion::Maybe2CppString.at(type.getMaybe()) + ", " + "armarx::aron::Path("+ARON_PATH_ACCESSOR+", {"+simox::alg::join(p.getPath(), ", ")+"})); // of " + cppAccessor); return b; @@ -83,8 +82,8 @@ namespace armarx::aron::codegenerator::cpp::generator std::string escaped_accessor = EscapeAccessor(cppAccessor); variantAccessor = ARON_VARIANT_RETURN_ACCESSOR + "_" + escaped_accessor; - block_if_data->addLine(variantAccessor + " = " + ARON_WRITER_ACCESSOR + ".writeNDArray({" + cppAccessor + nextEl() + "width, " + cppAccessor + nextEl() + "height, " + std::to_string(VoxelType2Cpp.at(type.getVoxelType()).second) + "}, "+ - "\"" + VoxelType2Cpp.at(type.getVoxelType()).first + "\", "+ + block_if_data->addLine(variantAccessor + " = " + ARON_WRITER_ACCESSOR + ".writeNDArray({" + cppAccessor + nextEl() + "width, " + cppAccessor + nextEl() + "height, " + std::to_string(std::get<1>(VoxelType2Cpp.at(type.getVoxelType()))) + "}, "+ + "\"" + std::get<0>(VoxelType2Cpp.at(type.getVoxelType())) + "\", "+ "reinterpret_cast<const unsigned char*>(" + cppAccessor + nextEl() + "points.data()), "+ "armarx::aron::Path("+ARON_PATH_ACCESSOR+", {" + simox::alg::join(p.getPath(), ", ") + "})); // of " + cppAccessor); diff --git a/source/RobotAPI/libraries/aron/core/codegenerator/codewriter/cpp/generator/ndarray/PointCloud.h b/source/RobotAPI/libraries/aron/codegeneration/codegenerator/codewriter/cpp/generator/ndarray/PointCloud.h similarity index 77% rename from source/RobotAPI/libraries/aron/core/codegenerator/codewriter/cpp/generator/ndarray/PointCloud.h rename to source/RobotAPI/libraries/aron/codegeneration/codegenerator/codewriter/cpp/generator/ndarray/PointCloud.h index 34936fbd6..9edc5a318 100644 --- a/source/RobotAPI/libraries/aron/core/codegenerator/codewriter/cpp/generator/ndarray/PointCloud.h +++ b/source/RobotAPI/libraries/aron/codegeneration/codegenerator/codewriter/cpp/generator/ndarray/PointCloud.h @@ -23,7 +23,7 @@ #pragma once -#include <RobotAPI/libraries/aron/core/codegenerator/codewriter/cpp/generator/detail/NDArrayGenerator.h> +#include <RobotAPI/libraries/aron/codegeneration/codegenerator/codewriter/cpp/generator/detail/NDArrayGenerator.h> #include <RobotAPI/libraries/aron/core/type/variant/ndarray/PointCloud.h> #include <map> @@ -40,14 +40,11 @@ namespace armarx::aron::codegenerator::cpp::generator virtual ~PointCloud() = default; // virtual implementations - std::vector<std::string> getRequiredIncludes() const override; - CppBlockPtr getResetSoftBlock(const std::string& cppAccessor) const override; - CppBlockPtr getWriteTypeBlock(const std::string& typeAccessor, const std::string& cppAccessor, const Path&, std::string& variantAccessor) const override; - CppBlockPtr getWriteBlock(const std::string& cppAccessor, const Path&, std::string& variantAccessor) const override; - CppBlockPtr getReadBlock(const std::string& cppAccessor, const std::string& variantAccessor) const override; - CppBlockPtr getEqualsBlock(const std::string& cppAccessor, const std::string&) const override; - - public: - static const std::map<type::pointcloud::VoxelType, std::pair<std::string, int>> VoxelType2Cpp; + std::vector<std::string> getRequiredIncludes() const final; + CppBlockPtr getResetSoftBlock(const std::string& cppAccessor) const final; + CppBlockPtr getWriteTypeBlock(const std::string& typeAccessor, const std::string& cppAccessor, const Path&, std::string& variantAccessor) const final; + CppBlockPtr getWriteBlock(const std::string& cppAccessor, const Path&, std::string& variantAccessor) const final; + CppBlockPtr getReadBlock(const std::string& cppAccessor, const std::string& variantAccessor) const final; + CppBlockPtr getEqualsBlock(const std::string& cppAccessor, const std::string&) const final; }; } diff --git a/source/RobotAPI/libraries/aron/core/codegenerator/codewriter/cpp/generator/ndarray/Quaternion.cpp b/source/RobotAPI/libraries/aron/codegeneration/codegenerator/codewriter/cpp/generator/ndarray/Quaternion.cpp similarity index 84% rename from source/RobotAPI/libraries/aron/core/codegenerator/codewriter/cpp/generator/ndarray/Quaternion.cpp rename to source/RobotAPI/libraries/aron/codegeneration/codegenerator/codewriter/cpp/generator/ndarray/Quaternion.cpp index 4a89ce3b5..32dae76ef 100644 --- a/source/RobotAPI/libraries/aron/core/codegenerator/codewriter/cpp/generator/ndarray/Quaternion.cpp +++ b/source/RobotAPI/libraries/aron/codegeneration/codegenerator/codewriter/cpp/generator/ndarray/Quaternion.cpp @@ -29,18 +29,17 @@ namespace armarx::aron::codegenerator::cpp::generator { - - const std::map<type::quaternion::ElementType, std::pair<std::string, int>> Quaternion::ElementType2Cpp = + const std::map<type::quaternion::ElementType, std::tuple<std::string, int, std::string>> ElementType2Cpp = { - {type::quaternion::ElementType::float32, {"float", 4}}, - {type::quaternion::ElementType::float64, {"double", 8}} + {type::quaternion::ElementType::FLOAT32, {"float", 4, "::armarx::aron::type::quaternion::ElementType::FLOAT32"}}, + {type::quaternion::ElementType::FLOAT64, {"double", 8, "::armarx::aron::type::quaternion::ElementType::FLOAT64"}} }; // constructors Quaternion::Quaternion(const type::Quaternion& n) : detail::NDArrayGenerator<type::Quaternion, Quaternion>( - "Eigen::Quaternion<" + ElementType2Cpp.at(n.getElementType()).first + ">", - "Eigen::Quaternion<" + ElementType2Cpp.at(n.getElementType()).first + ">", + "Eigen::Quaternion<" + std::get<0>(ElementType2Cpp.at(n.getElementType())) + ">", + "Eigen::Quaternion<" + std::get<0>(ElementType2Cpp.at(n.getElementType())) + ">", simox::meta::get_type_name<data::dto::NDArray>(), simox::meta::get_type_name<type::dto::Quaternion>(), n) @@ -65,7 +64,7 @@ namespace armarx::aron::codegenerator::cpp::generator std::string escaped_accessor = EscapeAccessor(cppAccessor); variantAccessor = ARON_VARIANT_RETURN_ACCESSOR + "_" + escaped_accessor; - b->addLine("auto " + variantAccessor + " = " + ARON_WRITER_ACCESSOR + ".writeQuaternion(" + conversion::QuaternionElementType2Cpp.at(type.getElementType()) + ", " + + b->addLine("auto " + variantAccessor + " = " + ARON_WRITER_ACCESSOR + ".writeQuaternion(" + std::get<2>(ElementType2Cpp.at(type.getElementType())) + ", " + conversion::Maybe2CppString.at(type.getMaybe()) + ", " + "armarx::aron::Path("+ARON_PATH_ACCESSOR+", {"+simox::alg::join(p.getPath(), ", ")+"})); // of " + cppAccessor); return b; @@ -77,8 +76,8 @@ namespace armarx::aron::codegenerator::cpp::generator std::string escaped_accessor = EscapeAccessor(cppAccessor); variantAccessor = ARON_VARIANT_RETURN_ACCESSOR + "_" + escaped_accessor; - block_if_data->addLine(variantAccessor + " = " + ARON_WRITER_ACCESSOR + ".writeNDArray({1, 4, " + std::to_string(ElementType2Cpp.at(type.getElementType()).second) + "}, "+ - "\"" + ElementType2Cpp.at(type.getElementType()).first + "\", "+ + block_if_data->addLine(variantAccessor + " = " + ARON_WRITER_ACCESSOR + ".writeNDArray({1, 4, " + std::to_string(std::get<1>(ElementType2Cpp.at(type.getElementType()))) + "}, "+ + "\"" + std::get<0>(ElementType2Cpp.at(type.getElementType())) + "\", "+ "reinterpret_cast<const unsigned char*>(" + cppAccessor + nextEl() + "coeffs().data()), "+ "armarx::aron::Path("+ARON_PATH_ACCESSOR+", {" + simox::alg::join(p.getPath(), ", ") + "})); // of " + cppAccessor); diff --git a/source/RobotAPI/libraries/aron/core/codegenerator/codewriter/cpp/generator/ndarray/Quaternion.h b/source/RobotAPI/libraries/aron/codegeneration/codegenerator/codewriter/cpp/generator/ndarray/Quaternion.h similarity index 77% rename from source/RobotAPI/libraries/aron/core/codegenerator/codewriter/cpp/generator/ndarray/Quaternion.h rename to source/RobotAPI/libraries/aron/codegeneration/codegenerator/codewriter/cpp/generator/ndarray/Quaternion.h index 063eb5308..f74468159 100644 --- a/source/RobotAPI/libraries/aron/core/codegenerator/codewriter/cpp/generator/ndarray/Quaternion.h +++ b/source/RobotAPI/libraries/aron/codegeneration/codegenerator/codewriter/cpp/generator/ndarray/Quaternion.h @@ -24,7 +24,7 @@ #pragma once -#include <RobotAPI/libraries/aron/core/codegenerator/codewriter/cpp/generator/detail/NDArrayGenerator.h> +#include <RobotAPI/libraries/aron/codegeneration/codegenerator/codewriter/cpp/generator/detail/NDArrayGenerator.h> #include <RobotAPI/libraries/aron/core/type/variant/ndarray/Quaternion.h> #include <map> @@ -41,14 +41,11 @@ namespace armarx::aron::codegenerator::cpp::generator virtual ~Quaternion() = default; // virtual implementations - std::vector<std::string> getRequiredIncludes() const override; - CppBlockPtr getResetSoftBlock(const std::string& cppAccessor) const override; - CppBlockPtr getWriteTypeBlock(const std::string& typeAccessor, const std::string& cppAccessor, const Path&, std::string& variantAccessor) const override; - CppBlockPtr getWriteBlock(const std::string& cppAccessor, const Path&, std::string& variantAccessor) const override; - CppBlockPtr getReadBlock(const std::string& cppAccessor, const std::string& variantAccessor) const override; - CppBlockPtr getEqualsBlock(const std::string&, const std::string&) const override; - - public: - static const std::map<type::quaternion::ElementType, std::pair<std::string, int>> ElementType2Cpp; + std::vector<std::string> getRequiredIncludes() const final; + CppBlockPtr getResetSoftBlock(const std::string& cppAccessor) const final; + CppBlockPtr getWriteTypeBlock(const std::string& typeAccessor, const std::string& cppAccessor, const Path&, std::string& variantAccessor) const final; + CppBlockPtr getWriteBlock(const std::string& cppAccessor, const Path&, std::string& variantAccessor) const final; + CppBlockPtr getReadBlock(const std::string& cppAccessor, const std::string& variantAccessor) const final; + CppBlockPtr getEqualsBlock(const std::string&, const std::string&) const final; }; } diff --git a/source/RobotAPI/libraries/aron/core/codegenerator/codewriter/cpp/generator/primitive/All.h b/source/RobotAPI/libraries/aron/codegeneration/codegenerator/codewriter/cpp/generator/primitive/All.h similarity index 100% rename from source/RobotAPI/libraries/aron/core/codegenerator/codewriter/cpp/generator/primitive/All.h rename to source/RobotAPI/libraries/aron/codegeneration/codegenerator/codewriter/cpp/generator/primitive/All.h diff --git a/source/RobotAPI/libraries/aron/core/codegenerator/codewriter/cpp/generator/primitive/Bool.cpp b/source/RobotAPI/libraries/aron/codegeneration/codegenerator/codewriter/cpp/generator/primitive/Bool.cpp similarity index 100% rename from source/RobotAPI/libraries/aron/core/codegenerator/codewriter/cpp/generator/primitive/Bool.cpp rename to source/RobotAPI/libraries/aron/codegeneration/codegenerator/codewriter/cpp/generator/primitive/Bool.cpp diff --git a/source/RobotAPI/libraries/aron/core/codegenerator/codewriter/cpp/generator/primitive/Bool.h b/source/RobotAPI/libraries/aron/codegeneration/codegenerator/codewriter/cpp/generator/primitive/Bool.h similarity index 97% rename from source/RobotAPI/libraries/aron/core/codegenerator/codewriter/cpp/generator/primitive/Bool.h rename to source/RobotAPI/libraries/aron/codegeneration/codegenerator/codewriter/cpp/generator/primitive/Bool.h index 082859e00..85172f3de 100644 --- a/source/RobotAPI/libraries/aron/core/codegenerator/codewriter/cpp/generator/primitive/Bool.h +++ b/source/RobotAPI/libraries/aron/codegeneration/codegenerator/codewriter/cpp/generator/primitive/Bool.h @@ -39,6 +39,6 @@ namespace armarx::aron::codegenerator::cpp::generator virtual ~Bool() = default; /* virtual implementations */ - CppBlockPtr getWriteTypeBlock(const std::string& typeAccessor, const std::string& cppAccessor, const Path& p, std::string& variantAccessor) const override; + CppBlockPtr getWriteTypeBlock(const std::string& typeAccessor, const std::string& cppAccessor, const Path& p, std::string& variantAccessor) const final; }; } diff --git a/source/RobotAPI/libraries/aron/core/codegenerator/codewriter/cpp/generator/primitive/Double.cpp b/source/RobotAPI/libraries/aron/codegeneration/codegenerator/codewriter/cpp/generator/primitive/Double.cpp similarity index 100% rename from source/RobotAPI/libraries/aron/core/codegenerator/codewriter/cpp/generator/primitive/Double.cpp rename to source/RobotAPI/libraries/aron/codegeneration/codegenerator/codewriter/cpp/generator/primitive/Double.cpp diff --git a/source/RobotAPI/libraries/aron/core/codegenerator/codewriter/cpp/generator/primitive/Double.h b/source/RobotAPI/libraries/aron/codegeneration/codegenerator/codewriter/cpp/generator/primitive/Double.h similarity index 90% rename from source/RobotAPI/libraries/aron/core/codegenerator/codewriter/cpp/generator/primitive/Double.h rename to source/RobotAPI/libraries/aron/codegeneration/codegenerator/codewriter/cpp/generator/primitive/Double.h index dc65d42d9..e109cc626 100644 --- a/source/RobotAPI/libraries/aron/core/codegenerator/codewriter/cpp/generator/primitive/Double.h +++ b/source/RobotAPI/libraries/aron/codegeneration/codegenerator/codewriter/cpp/generator/primitive/Double.h @@ -23,7 +23,7 @@ #pragma once -#include <RobotAPI/libraries/aron/core/codegenerator/codewriter/cpp/generator/detail/PrimitiveGenerator.h> +#include <RobotAPI/libraries/aron/codegeneration/codegenerator/codewriter/cpp/generator/detail/PrimitiveGenerator.h> #include <RobotAPI/libraries/aron/core/type/variant/primitive/Double.h> @@ -38,6 +38,6 @@ namespace armarx::aron::codegenerator::cpp::generator virtual ~Double() = default; /* virtual implementations */ - CppBlockPtr getWriteTypeBlock(const std::string& typeAccessor, const std::string& cppAccessor, const Path& p, std::string& variantAccessor) const override; + CppBlockPtr getWriteTypeBlock(const std::string& typeAccessor, const std::string& cppAccessor, const Path& p, std::string& variantAccessor) const final; }; } diff --git a/source/RobotAPI/libraries/aron/core/codegenerator/codewriter/cpp/generator/primitive/Float.cpp b/source/RobotAPI/libraries/aron/codegeneration/codegenerator/codewriter/cpp/generator/primitive/Float.cpp similarity index 100% rename from source/RobotAPI/libraries/aron/core/codegenerator/codewriter/cpp/generator/primitive/Float.cpp rename to source/RobotAPI/libraries/aron/codegeneration/codegenerator/codewriter/cpp/generator/primitive/Float.cpp diff --git a/source/RobotAPI/libraries/aron/core/codegenerator/codewriter/cpp/generator/primitive/Float.h b/source/RobotAPI/libraries/aron/codegeneration/codegenerator/codewriter/cpp/generator/primitive/Float.h similarity index 90% rename from source/RobotAPI/libraries/aron/core/codegenerator/codewriter/cpp/generator/primitive/Float.h rename to source/RobotAPI/libraries/aron/codegeneration/codegenerator/codewriter/cpp/generator/primitive/Float.h index 3e4381262..a2f52f4fb 100644 --- a/source/RobotAPI/libraries/aron/core/codegenerator/codewriter/cpp/generator/primitive/Float.h +++ b/source/RobotAPI/libraries/aron/codegeneration/codegenerator/codewriter/cpp/generator/primitive/Float.h @@ -23,7 +23,7 @@ #pragma once -#include <RobotAPI/libraries/aron/core/codegenerator/codewriter/cpp/generator/detail/PrimitiveGenerator.h> +#include <RobotAPI/libraries/aron/codegeneration/codegenerator/codewriter/cpp/generator/detail/PrimitiveGenerator.h> #include <RobotAPI/libraries/aron/core/type/variant/primitive/Float.h> @@ -38,6 +38,6 @@ namespace armarx::aron::codegenerator::cpp::generator virtual ~Float() = default; /* virtual implementations */ - CppBlockPtr getWriteTypeBlock(const std::string& typeAccessor, const std::string& cppAccessor, const Path& p, std::string& variantAccessor) const override; + CppBlockPtr getWriteTypeBlock(const std::string& typeAccessor, const std::string& cppAccessor, const Path& p, std::string& variantAccessor) const final; }; } diff --git a/source/RobotAPI/libraries/aron/core/codegenerator/codewriter/cpp/generator/primitive/Int.cpp b/source/RobotAPI/libraries/aron/codegeneration/codegenerator/codewriter/cpp/generator/primitive/Int.cpp similarity index 100% rename from source/RobotAPI/libraries/aron/core/codegenerator/codewriter/cpp/generator/primitive/Int.cpp rename to source/RobotAPI/libraries/aron/codegeneration/codegenerator/codewriter/cpp/generator/primitive/Int.cpp diff --git a/source/RobotAPI/libraries/aron/core/codegenerator/codewriter/cpp/generator/primitive/Int.h b/source/RobotAPI/libraries/aron/codegeneration/codegenerator/codewriter/cpp/generator/primitive/Int.h similarity index 90% rename from source/RobotAPI/libraries/aron/core/codegenerator/codewriter/cpp/generator/primitive/Int.h rename to source/RobotAPI/libraries/aron/codegeneration/codegenerator/codewriter/cpp/generator/primitive/Int.h index a57193e00..eb18e4454 100644 --- a/source/RobotAPI/libraries/aron/core/codegenerator/codewriter/cpp/generator/primitive/Int.h +++ b/source/RobotAPI/libraries/aron/codegeneration/codegenerator/codewriter/cpp/generator/primitive/Int.h @@ -23,7 +23,7 @@ #pragma once -#include <RobotAPI/libraries/aron/core/codegenerator/codewriter/cpp/generator/detail/PrimitiveGenerator.h> +#include <RobotAPI/libraries/aron/codegeneration/codegenerator/codewriter/cpp/generator/detail/PrimitiveGenerator.h> #include <RobotAPI/libraries/aron/core/type/variant/primitive/Int.h> @@ -38,6 +38,6 @@ namespace armarx::aron::codegenerator::cpp::generator virtual ~Int() = default; /* virtual implementations */ - CppBlockPtr getWriteTypeBlock(const std::string& typeAccessor, const std::string& cppAccessor, const Path& p, std::string& variantAccessor) const override; + CppBlockPtr getWriteTypeBlock(const std::string& typeAccessor, const std::string& cppAccessor, const Path& p, std::string& variantAccessor) const final; }; } diff --git a/source/RobotAPI/libraries/aron/core/codegenerator/codewriter/cpp/generator/primitive/Long.cpp b/source/RobotAPI/libraries/aron/codegeneration/codegenerator/codewriter/cpp/generator/primitive/Long.cpp similarity index 100% rename from source/RobotAPI/libraries/aron/core/codegenerator/codewriter/cpp/generator/primitive/Long.cpp rename to source/RobotAPI/libraries/aron/codegeneration/codegenerator/codewriter/cpp/generator/primitive/Long.cpp diff --git a/source/RobotAPI/libraries/aron/core/codegenerator/codewriter/cpp/generator/primitive/Long.h b/source/RobotAPI/libraries/aron/codegeneration/codegenerator/codewriter/cpp/generator/primitive/Long.h similarity index 90% rename from source/RobotAPI/libraries/aron/core/codegenerator/codewriter/cpp/generator/primitive/Long.h rename to source/RobotAPI/libraries/aron/codegeneration/codegenerator/codewriter/cpp/generator/primitive/Long.h index c16b8c439..8e74bf85b 100644 --- a/source/RobotAPI/libraries/aron/core/codegenerator/codewriter/cpp/generator/primitive/Long.h +++ b/source/RobotAPI/libraries/aron/codegeneration/codegenerator/codewriter/cpp/generator/primitive/Long.h @@ -23,7 +23,7 @@ #pragma once -#include <RobotAPI/libraries/aron/core/codegenerator/codewriter/cpp/generator/detail/PrimitiveGenerator.h> +#include <RobotAPI/libraries/aron/codegeneration/codegenerator/codewriter/cpp/generator/detail/PrimitiveGenerator.h> #include <RobotAPI/libraries/aron/core/type/variant/primitive/Long.h> @@ -38,6 +38,6 @@ namespace armarx::aron::codegenerator::cpp::generator virtual ~Long() = default; /* virtual implementations */ - CppBlockPtr getWriteTypeBlock(const std::string& typeAccessor, const std::string& cppAccessor, const Path& p, std::string& variantAccessor) const override; + CppBlockPtr getWriteTypeBlock(const std::string& typeAccessor, const std::string& cppAccessor, const Path& p, std::string& variantAccessor) const final; }; } diff --git a/source/RobotAPI/libraries/aron/core/codegenerator/codewriter/cpp/generator/primitive/String.cpp b/source/RobotAPI/libraries/aron/codegeneration/codegenerator/codewriter/cpp/generator/primitive/String.cpp similarity index 100% rename from source/RobotAPI/libraries/aron/core/codegenerator/codewriter/cpp/generator/primitive/String.cpp rename to source/RobotAPI/libraries/aron/codegeneration/codegenerator/codewriter/cpp/generator/primitive/String.cpp diff --git a/source/RobotAPI/libraries/aron/core/codegenerator/codewriter/cpp/generator/primitive/String.h b/source/RobotAPI/libraries/aron/codegeneration/codegenerator/codewriter/cpp/generator/primitive/String.h similarity index 90% rename from source/RobotAPI/libraries/aron/core/codegenerator/codewriter/cpp/generator/primitive/String.h rename to source/RobotAPI/libraries/aron/codegeneration/codegenerator/codewriter/cpp/generator/primitive/String.h index 254cd4e84..7db96c871 100644 --- a/source/RobotAPI/libraries/aron/core/codegenerator/codewriter/cpp/generator/primitive/String.h +++ b/source/RobotAPI/libraries/aron/codegeneration/codegenerator/codewriter/cpp/generator/primitive/String.h @@ -23,7 +23,7 @@ #pragma once -#include <RobotAPI/libraries/aron/core/codegenerator/codewriter/cpp/generator/detail/PrimitiveGenerator.h> +#include <RobotAPI/libraries/aron/codegeneration/codegenerator/codewriter/cpp/generator/detail/PrimitiveGenerator.h> #include <RobotAPI/libraries/aron/core/type/variant/primitive/String.h> @@ -38,6 +38,6 @@ namespace armarx::aron::codegenerator::cpp::generator virtual ~String() = default; /* virtual implementations */ - CppBlockPtr getWriteTypeBlock(const std::string& typeAccessor, const std::string& cppAccessor, const Path& p, std::string& variantAccessor) const override; + CppBlockPtr getWriteTypeBlock(const std::string& typeAccessor, const std::string& cppAccessor, const Path& p, std::string& variantAccessor) const final; }; } diff --git a/source/RobotAPI/libraries/aron/core/codegenerator/codewriter/cpp/generator/toplevel/All.h b/source/RobotAPI/libraries/aron/codegeneration/codegenerator/codewriter/cpp/generator/toplevel/All.h similarity index 100% rename from source/RobotAPI/libraries/aron/core/codegenerator/codewriter/cpp/generator/toplevel/All.h rename to source/RobotAPI/libraries/aron/codegeneration/codegenerator/codewriter/cpp/generator/toplevel/All.h diff --git a/source/RobotAPI/libraries/aron/core/codegenerator/codewriter/cpp/generator/toplevel/IntEnumClass.cpp b/source/RobotAPI/libraries/aron/codegeneration/codegenerator/codewriter/cpp/generator/toplevel/IntEnumClass.cpp similarity index 99% rename from source/RobotAPI/libraries/aron/core/codegenerator/codewriter/cpp/generator/toplevel/IntEnumClass.cpp rename to source/RobotAPI/libraries/aron/codegeneration/codegenerator/codewriter/cpp/generator/toplevel/IntEnumClass.cpp index 2b7b64550..768fa0dd6 100644 --- a/source/RobotAPI/libraries/aron/core/codegenerator/codewriter/cpp/generator/toplevel/IntEnumClass.cpp +++ b/source/RobotAPI/libraries/aron/codegeneration/codegenerator/codewriter/cpp/generator/toplevel/IntEnumClass.cpp @@ -38,7 +38,7 @@ namespace armarx::aron::codegenerator::cpp::generator simox::meta::get_type_name<type::dto::IntEnum>(), n) { - if (type.getMaybe() != type::Maybe::eNone) + if (type.getMaybe() != type::Maybe::NONE) { throw error::ValueNotValidException(__PRETTY_FUNCTION__, "Somehow the maybe flag of a top level int enum declaration is set. This is not valid!", std::to_string((int) type.getMaybe()), type.getPath()); } diff --git a/source/RobotAPI/libraries/aron/core/codegenerator/codewriter/cpp/generator/toplevel/IntEnumClass.h b/source/RobotAPI/libraries/aron/codegeneration/codegenerator/codewriter/cpp/generator/toplevel/IntEnumClass.h similarity index 88% rename from source/RobotAPI/libraries/aron/core/codegenerator/codewriter/cpp/generator/toplevel/IntEnumClass.h rename to source/RobotAPI/libraries/aron/codegeneration/codegenerator/codewriter/cpp/generator/toplevel/IntEnumClass.h index 1d105b79c..b03310d42 100644 --- a/source/RobotAPI/libraries/aron/core/codegenerator/codewriter/cpp/generator/toplevel/IntEnumClass.h +++ b/source/RobotAPI/libraries/aron/codegeneration/codegenerator/codewriter/cpp/generator/toplevel/IntEnumClass.h @@ -23,7 +23,7 @@ #pragma once -#include <RobotAPI/libraries/aron/core/codegenerator/codewriter/cpp/generator/detail/SpecializedGenerator.h> +#include <RobotAPI/libraries/aron/codegeneration/codegenerator/codewriter/cpp/generator/detail/SpecializedGenerator.h> #include <RobotAPI/libraries/aron/core/type/variant/enum/IntEnum.h> #include <map> @@ -41,13 +41,13 @@ namespace armarx::aron::codegenerator::cpp::generator virtual ~IntEnumClass() = default; // virtual implementations - std::vector<CppFieldPtr> getPublicVariableDeclarations(const std::string&) const override; - CppBlockPtr getResetHardBlock(const std::string& cppAccessor) const override; - CppBlockPtr getResetSoftBlock(const std::string& cppAccessor) const override; - CppBlockPtr getWriteTypeBlock(const std::string& typeAccessor, const std::string& cppAccessor, const Path&, std::string& variantAccessor) const override; - CppBlockPtr getWriteBlock(const std::string& cppAccessor, const Path&, std::string& variantAccessor) const override; - CppBlockPtr getReadBlock(const std::string& cppAccessor, const std::string& variantAccessor) const override; - CppBlockPtr getEqualsBlock(const std::string&, const std::string&) const override; + std::vector<CppFieldPtr> getPublicVariableDeclarations(const std::string&) const final; + CppBlockPtr getResetHardBlock(const std::string& cppAccessor) const final; + CppBlockPtr getResetSoftBlock(const std::string& cppAccessor) const final; + CppBlockPtr getWriteTypeBlock(const std::string& typeAccessor, const std::string& cppAccessor, const Path&, std::string& variantAccessor) const final; + CppBlockPtr getWriteBlock(const std::string& cppAccessor, const Path&, std::string& variantAccessor) const final; + CppBlockPtr getReadBlock(const std::string& cppAccessor, const std::string& variantAccessor) const final; + CppBlockPtr getEqualsBlock(const std::string&, const std::string&) const final; // TODO: Move some of those methods to upper class for enums (if we want to support multiple enums) CppCtorPtr toCopyCtor(const std::string&) const; diff --git a/source/RobotAPI/libraries/aron/core/codegenerator/codewriter/cpp/generator/toplevel/ObjectClass.cpp b/source/RobotAPI/libraries/aron/codegeneration/codegenerator/codewriter/cpp/generator/toplevel/ObjectClass.cpp similarity index 98% rename from source/RobotAPI/libraries/aron/core/codegenerator/codewriter/cpp/generator/toplevel/ObjectClass.cpp rename to source/RobotAPI/libraries/aron/codegeneration/codegenerator/codewriter/cpp/generator/toplevel/ObjectClass.cpp index 4a6482d81..f8e044b8d 100644 --- a/source/RobotAPI/libraries/aron/core/codegenerator/codewriter/cpp/generator/toplevel/ObjectClass.cpp +++ b/source/RobotAPI/libraries/aron/codegeneration/codegenerator/codewriter/cpp/generator/toplevel/ObjectClass.cpp @@ -38,7 +38,7 @@ namespace armarx::aron::codegenerator::cpp::generator simox::meta::get_type_name<data::dto::Dict>(), simox::meta::get_type_name<type::dto::AronObject>(), e) { - if (type.getMaybe() != type::Maybe::eNone) + if (type.getMaybe() != type::Maybe::NONE) { throw error::ValueNotValidException(__PRETTY_FUNCTION__, "Somehow the maybe flag of a top level object declaration is set. This is not valid!", std::to_string((int) type.getMaybe()) + " aka " + type::defaultconversion::string::Maybe2String.at(type.getMaybe()), type.getPath()); } @@ -119,7 +119,7 @@ namespace armarx::aron::codegenerator::cpp::generator b->addLine("auto " + OBJECT_EXTENDS_ACCESSOR + " = " + extends_s->getFullInstantiatedCppTypename() + "::writeType(" + ARON_WRITER_ACCESSOR + ", " + "{" + simox::alg::join(type.getExtends()->getTemplateInstantiations(), ", ") + "}, " + - "::armarx::aron::type::Maybe::eNone);"); + "::armarx::aron::type::Maybe::NONE);"); } else { diff --git a/source/RobotAPI/libraries/aron/core/codegenerator/codewriter/cpp/generator/toplevel/ObjectClass.h b/source/RobotAPI/libraries/aron/codegeneration/codegenerator/codewriter/cpp/generator/toplevel/ObjectClass.h similarity index 82% rename from source/RobotAPI/libraries/aron/core/codegenerator/codewriter/cpp/generator/toplevel/ObjectClass.h rename to source/RobotAPI/libraries/aron/codegeneration/codegenerator/codewriter/cpp/generator/toplevel/ObjectClass.h index 7046cddfa..dd8e7d3d9 100644 --- a/source/RobotAPI/libraries/aron/core/codegenerator/codewriter/cpp/generator/toplevel/ObjectClass.h +++ b/source/RobotAPI/libraries/aron/codegeneration/codegenerator/codewriter/cpp/generator/toplevel/ObjectClass.h @@ -23,7 +23,7 @@ #pragma once -#include <RobotAPI/libraries/aron/core/codegenerator/codewriter/cpp/generator/detail/SpecializedGenerator.h> +#include <RobotAPI/libraries/aron/codegeneration/codegenerator/codewriter/cpp/generator/detail/SpecializedGenerator.h> #include <RobotAPI/libraries/aron/core/type/variant/container/Object.h> @@ -38,13 +38,13 @@ namespace armarx::aron::codegenerator::cpp::generator virtual ~ObjectClass() = default; // virtual implementations - std::vector<std::string> getRequiredIncludes() const override; - std::vector<CppFieldPtr> getPublicVariableDeclarations(const std::string&) const override; - CppBlockPtr getResetHardBlock(const std::string& cppAccessor) const override; - CppBlockPtr getResetSoftBlock(const std::string& cppAccessor) const override; - CppBlockPtr getWriteTypeBlock(const std::string& typeAccessor, const std::string& cppAccessor, const Path&, std::string& variantAccessor) const override; - CppBlockPtr getWriteBlock(const std::string& cppAccessor, const Path&, std::string&) const override; - CppBlockPtr getReadBlock(const std::string& cppAccessor, const std::string&) const override; - CppBlockPtr getEqualsBlock(const std::string&, const std::string&) const override; + std::vector<std::string> getRequiredIncludes() const final; + std::vector<CppFieldPtr> getPublicVariableDeclarations(const std::string&) const final; + CppBlockPtr getResetHardBlock(const std::string& cppAccessor) const final; + CppBlockPtr getResetSoftBlock(const std::string& cppAccessor) const final; + CppBlockPtr getWriteTypeBlock(const std::string& typeAccessor, const std::string& cppAccessor, const Path&, std::string& variantAccessor) const final; + CppBlockPtr getWriteBlock(const std::string& cppAccessor, const Path&, std::string&) const final; + CppBlockPtr getReadBlock(const std::string& cppAccessor, const std::string&) const final; + CppBlockPtr getEqualsBlock(const std::string&, const std::string&) const final; }; } diff --git a/source/RobotAPI/libraries/aron/core/codegenerator/helper/ReaderInfo.h b/source/RobotAPI/libraries/aron/codegeneration/codegenerator/helper/ReaderInfo.h similarity index 100% rename from source/RobotAPI/libraries/aron/core/codegenerator/helper/ReaderInfo.h rename to source/RobotAPI/libraries/aron/codegeneration/codegenerator/helper/ReaderInfo.h diff --git a/source/RobotAPI/libraries/aron/core/codegenerator/helper/WriterInfo.h b/source/RobotAPI/libraries/aron/codegeneration/codegenerator/helper/WriterInfo.h similarity index 100% rename from source/RobotAPI/libraries/aron/core/codegenerator/helper/WriterInfo.h rename to source/RobotAPI/libraries/aron/codegeneration/codegenerator/helper/WriterInfo.h diff --git a/source/RobotAPI/libraries/aron/codegeneration/test/CMakeLists.txt b/source/RobotAPI/libraries/aron/codegeneration/test/CMakeLists.txt new file mode 100644 index 000000000..e57da47b6 --- /dev/null +++ b/source/RobotAPI/libraries/aron/codegeneration/test/CMakeLists.txt @@ -0,0 +1,147 @@ +find_package(Simox QUIET) +armarx_build_if(Simox_FOUND "Simox not available") + +find_package(Eigen3 QUIET) +armarx_build_if(Eigen3_FOUND "Eigen3 not available") + +find_package(IVT COMPONENTS ivt ivtopencv QUIET) +armarx_build_if(IVT_FOUND "IVT not available") + +find_package(OpenCV QUIET) +armarx_build_if(OpenCV_FOUND "OpenCV not available") + +find_package(PCL QUIET) +armarx_build_if(PCL_FOUND "PCL not available") + +###################### +# ARON OPERATOR TEST # +###################### +armarx_add_test( + TEST_NAME + aronOperatorTest + TEST_FILE + aronOperatorTest.cpp + LIBS + SimoxUtility # Simox::SimoxUtility + ArmarXCore + aron + aroncommon + INCLUDE_DIRECTORIES + ${Simox_INCLUDE_DIR} +) + +###################### +# ARON CODE GEN TEST # +###################### +armarx_add_test( + TEST_NAME + aronCodeGenerationTest + TEST_FILE + aronCodeGenerationTest.cpp + LIBS + SimoxUtility # Simox::SimoxUtility + ArmarXCore + RobotAPI::aron + ARON_FILES + aron/AnyTest.xml + aron/TemplateTest.xml + aron/DictTest.xml + aron/MatrixTest.xml + aron/QuaternionTest.xml + aron/EnumTest.xml + aron/HumanPoseTest.xml + aron/ImageTest.xml + aron/ListTest.xml + aron/NaturalIKTest.xml + aron/ObjectTest.xml + aron/OrientationTest.xml + aron/PointCloudTest.xml + aron/PoseTest.xml + aron/PositionTest.xml + aron/PrimitiveTest.xml + aron/OptionalTest.xml + aron/DtoTest.xml + INCLUDE_DIRECTORIES + ${Simox_INCLUDE_DIR} + ${Eigen3_INCLUDE_DIR} + ${IVT_INCLUDE_DIRS} + ${OpenCV_INCLUDE_DIRS} + ${PCL_INCLUDE_DIRS} +) + +###################### +# ARON NAVIGATE TEST # +###################### +armarx_add_test( + TEST_NAME + aronNavigateTest + TEST_FILE + aronNavigateTest.cpp + LIBS + SimoxUtility # Simox::SimoxUtility + ArmarXCore + RobotAPI::aron + ARON_FILES + aron/NaturalIKTest.xml + INCLUDE_DIRECTORIES + ${Simox_INCLUDE_DIR} +) + +###################### +# ARON EXTENDS TEST # +###################### +armarx_add_test( + TEST_NAME + aronExtendsTest + TEST_FILE + aronExtendsTest.cpp + LIBS + SimoxUtility # Simox::SimoxUtility + ArmarXCore + RobotAPI::aron + ARON_FILES + aron/BaseClassTest.xml + aron/DerivedClassTest.xml + INCLUDE_DIRECTORIES + ${Simox_INCLUDE_DIR} +) + +######################## +# ARON RANDOMIZED TEST # +######################## +#armarx_add_test( +# TEST_NAME +# aronRandomizedTest +# TEST_FILE +# aronRandomizedTest.cpp +# LIBS +# SimoxUtility # Simox::SimoxUtility +# ArmarXCore +# RobotAPI::aron +# ivt +# ivtopencv +# ${PCL_COMMON_LIBRARIES} +# aronjsonconverter +# ARON_FILES +# aron/DictTest.xml +# aron/MatrixTest.xml +# aron/QuaternionTest.xml +# aron/EnumTest.xml +# aron/HumanPoseTest.xml +# aron/ListTest.xml +# aron/NaturalIKTest.xml +# aron/ObjectTest.xml +# aron/OrientationTest.xml +# aron/PointCloudTest.xml +# aron/PoseTest.xml +# aron/PositionTest.xml +# aron/PrimitiveTest.xml +# aron/OptionalTest.xml +# aron/ImageTest.xml +# INCLUDE_DIRECTORIES +# ${Simox_INCLUDE_DIR} +# ${Eigen3_INCLUDE_DIR} +# ${IVT_INCLUDE_DIRS} +# ${OpenCV_INCLUDE_DIRS} +# ${PCL_INCLUDE_DIRS} +#) diff --git a/source/RobotAPI/libraries/aron/core/test/aron/AnyTest.xml b/source/RobotAPI/libraries/aron/codegeneration/test/aron/AnyTest.xml similarity index 100% rename from source/RobotAPI/libraries/aron/core/test/aron/AnyTest.xml rename to source/RobotAPI/libraries/aron/codegeneration/test/aron/AnyTest.xml diff --git a/source/RobotAPI/libraries/aron/core/test/aron/BaseClassTest.xml b/source/RobotAPI/libraries/aron/codegeneration/test/aron/BaseClassTest.xml similarity index 100% rename from source/RobotAPI/libraries/aron/core/test/aron/BaseClassTest.xml rename to source/RobotAPI/libraries/aron/codegeneration/test/aron/BaseClassTest.xml diff --git a/source/RobotAPI/libraries/aron/core/test/aron/DerivedClassTest.xml b/source/RobotAPI/libraries/aron/codegeneration/test/aron/DerivedClassTest.xml similarity index 82% rename from source/RobotAPI/libraries/aron/core/test/aron/DerivedClassTest.xml rename to source/RobotAPI/libraries/aron/codegeneration/test/aron/DerivedClassTest.xml index fba1b8461..53e8107bc 100644 --- a/source/RobotAPI/libraries/aron/core/test/aron/DerivedClassTest.xml +++ b/source/RobotAPI/libraries/aron/codegeneration/test/aron/DerivedClassTest.xml @@ -2,7 +2,7 @@ <?xml version="1.0" encoding="UTF-8" ?> <AronTypeDefinition> <AronIncludes> - <Include include="<RobotAPI/libraries/aron/core/test/aron/BaseClassTest.xml>" autoinclude="true" /> + <Include include="<RobotAPI/libraries/aron/codegeneration/test/aron/BaseClassTest.xml>" autoinclude="true" /> </AronIncludes> <GenerateTypes> <Object name='armarx::DerivedClassTest' extends="armarx::BaseClassTest" doc-brief="This is a brief doc" doc-author="Itse me, Mario!"> diff --git a/source/RobotAPI/libraries/aron/core/test/aron/DictTest.xml b/source/RobotAPI/libraries/aron/codegeneration/test/aron/DictTest.xml similarity index 100% rename from source/RobotAPI/libraries/aron/core/test/aron/DictTest.xml rename to source/RobotAPI/libraries/aron/codegeneration/test/aron/DictTest.xml diff --git a/source/RobotAPI/libraries/aron/codegeneration/test/aron/DtoTest.xml b/source/RobotAPI/libraries/aron/codegeneration/test/aron/DtoTest.xml new file mode 100644 index 000000000..b08df68f4 --- /dev/null +++ b/source/RobotAPI/libraries/aron/codegeneration/test/aron/DtoTest.xml @@ -0,0 +1,16 @@ +<!--Some fancy comment --> +<?xml version="1.0" encoding="UTF-8" ?> +<AronTypeDefinition> + <GenerateTypes> + <Object name='armarx::DtoTest'> + <objectchild key='the_time'> + <datetime /> + </ObjectChild> + <objectchild key='the_duration'> + <duration /> + </ObjectChild> + </Object> + </GenerateTypes> +</AronTypeDefinition> + + diff --git a/source/RobotAPI/libraries/aron/core/test/aron/EnumTest.xml b/source/RobotAPI/libraries/aron/codegeneration/test/aron/EnumTest.xml similarity index 100% rename from source/RobotAPI/libraries/aron/core/test/aron/EnumTest.xml rename to source/RobotAPI/libraries/aron/codegeneration/test/aron/EnumTest.xml diff --git a/source/RobotAPI/libraries/aron/core/test/aron/HumanPoseTest.xml b/source/RobotAPI/libraries/aron/codegeneration/test/aron/HumanPoseTest.xml similarity index 100% rename from source/RobotAPI/libraries/aron/core/test/aron/HumanPoseTest.xml rename to source/RobotAPI/libraries/aron/codegeneration/test/aron/HumanPoseTest.xml diff --git a/source/RobotAPI/libraries/aron/core/test/aron/IKResult.xml b/source/RobotAPI/libraries/aron/codegeneration/test/aron/IKResult.xml similarity index 100% rename from source/RobotAPI/libraries/aron/core/test/aron/IKResult.xml rename to source/RobotAPI/libraries/aron/codegeneration/test/aron/IKResult.xml diff --git a/source/RobotAPI/libraries/aron/core/test/aron/ImageTest.xml b/source/RobotAPI/libraries/aron/codegeneration/test/aron/ImageTest.xml similarity index 100% rename from source/RobotAPI/libraries/aron/core/test/aron/ImageTest.xml rename to source/RobotAPI/libraries/aron/codegeneration/test/aron/ImageTest.xml diff --git a/source/RobotAPI/libraries/aron/core/test/aron/ListTest.xml b/source/RobotAPI/libraries/aron/codegeneration/test/aron/ListTest.xml similarity index 100% rename from source/RobotAPI/libraries/aron/core/test/aron/ListTest.xml rename to source/RobotAPI/libraries/aron/codegeneration/test/aron/ListTest.xml diff --git a/source/RobotAPI/libraries/aron/core/test/aron/MatrixTest.xml b/source/RobotAPI/libraries/aron/codegeneration/test/aron/MatrixTest.xml similarity index 100% rename from source/RobotAPI/libraries/aron/core/test/aron/MatrixTest.xml rename to source/RobotAPI/libraries/aron/codegeneration/test/aron/MatrixTest.xml diff --git a/source/RobotAPI/libraries/aron/core/test/aron/NaturalIKTest.xml b/source/RobotAPI/libraries/aron/codegeneration/test/aron/NaturalIKTest.xml similarity index 100% rename from source/RobotAPI/libraries/aron/core/test/aron/NaturalIKTest.xml rename to source/RobotAPI/libraries/aron/codegeneration/test/aron/NaturalIKTest.xml diff --git a/source/RobotAPI/libraries/aron/core/test/aron/ObjectTest.xml b/source/RobotAPI/libraries/aron/codegeneration/test/aron/ObjectTest.xml similarity index 100% rename from source/RobotAPI/libraries/aron/core/test/aron/ObjectTest.xml rename to source/RobotAPI/libraries/aron/codegeneration/test/aron/ObjectTest.xml diff --git a/source/RobotAPI/libraries/aron/core/test/aron/OptionalTest.xml b/source/RobotAPI/libraries/aron/codegeneration/test/aron/OptionalTest.xml similarity index 100% rename from source/RobotAPI/libraries/aron/core/test/aron/OptionalTest.xml rename to source/RobotAPI/libraries/aron/codegeneration/test/aron/OptionalTest.xml diff --git a/source/RobotAPI/libraries/aron/core/test/aron/OrientationTest.xml b/source/RobotAPI/libraries/aron/codegeneration/test/aron/OrientationTest.xml similarity index 100% rename from source/RobotAPI/libraries/aron/core/test/aron/OrientationTest.xml rename to source/RobotAPI/libraries/aron/codegeneration/test/aron/OrientationTest.xml diff --git a/source/RobotAPI/libraries/aron/core/test/aron/PointCloudTest.xml b/source/RobotAPI/libraries/aron/codegeneration/test/aron/PointCloudTest.xml similarity index 100% rename from source/RobotAPI/libraries/aron/core/test/aron/PointCloudTest.xml rename to source/RobotAPI/libraries/aron/codegeneration/test/aron/PointCloudTest.xml diff --git a/source/RobotAPI/libraries/aron/core/test/aron/PoseTest.xml b/source/RobotAPI/libraries/aron/codegeneration/test/aron/PoseTest.xml similarity index 100% rename from source/RobotAPI/libraries/aron/core/test/aron/PoseTest.xml rename to source/RobotAPI/libraries/aron/codegeneration/test/aron/PoseTest.xml diff --git a/source/RobotAPI/libraries/aron/core/test/aron/PositionTest.xml b/source/RobotAPI/libraries/aron/codegeneration/test/aron/PositionTest.xml similarity index 100% rename from source/RobotAPI/libraries/aron/core/test/aron/PositionTest.xml rename to source/RobotAPI/libraries/aron/codegeneration/test/aron/PositionTest.xml diff --git a/source/RobotAPI/libraries/aron/core/test/aron/PrimitiveTest.xml b/source/RobotAPI/libraries/aron/codegeneration/test/aron/PrimitiveTest.xml similarity index 89% rename from source/RobotAPI/libraries/aron/core/test/aron/PrimitiveTest.xml rename to source/RobotAPI/libraries/aron/codegeneration/test/aron/PrimitiveTest.xml index ea38c815f..177030669 100644 --- a/source/RobotAPI/libraries/aron/core/test/aron/PrimitiveTest.xml +++ b/source/RobotAPI/libraries/aron/codegeneration/test/aron/PrimitiveTest.xml @@ -21,9 +21,6 @@ <objectchild key='the_bool'> <bool /> </ObjectChild> - <objectchild key='the_time'> - <time /> - </ObjectChild> </Object> </GenerateTypes> </AronTypeDefinition> diff --git a/source/RobotAPI/libraries/aron/core/test/aron/QuaternionTest.xml b/source/RobotAPI/libraries/aron/codegeneration/test/aron/QuaternionTest.xml similarity index 100% rename from source/RobotAPI/libraries/aron/core/test/aron/QuaternionTest.xml rename to source/RobotAPI/libraries/aron/codegeneration/test/aron/QuaternionTest.xml diff --git a/source/RobotAPI/libraries/aron/core/test/aron/TemplateTest.xml b/source/RobotAPI/libraries/aron/codegeneration/test/aron/TemplateTest.xml similarity index 100% rename from source/RobotAPI/libraries/aron/core/test/aron/TemplateTest.xml rename to source/RobotAPI/libraries/aron/codegeneration/test/aron/TemplateTest.xml diff --git a/source/RobotAPI/libraries/aron/core/test/aronCodeGenerationTest.cpp b/source/RobotAPI/libraries/aron/codegeneration/test/aronCodeGenerationTest.cpp similarity index 88% rename from source/RobotAPI/libraries/aron/core/test/aronCodeGenerationTest.cpp rename to source/RobotAPI/libraries/aron/codegeneration/test/aronCodeGenerationTest.cpp index 392739b2d..e9c8ad44b 100644 --- a/source/RobotAPI/libraries/aron/core/test/aronCodeGenerationTest.cpp +++ b/source/RobotAPI/libraries/aron/codegeneration/test/aronCodeGenerationTest.cpp @@ -38,25 +38,23 @@ #include <ArmarXCore/libraries/cppgen/CppClass.h> #include <RobotAPI/libraries/aron/core/Exception.h> -// Aron -#include <RobotAPI/libraries/aron/core/test/Randomizer.h> - // Generated File -#include <RobotAPI/libraries/aron/core/test/aron/TemplateTest.aron.generated.h> -#include <RobotAPI/libraries/aron/core/test/aron/AnyTest.aron.generated.h> -#include <RobotAPI/libraries/aron/core/test/aron/ListTest.aron.generated.h> -#include <RobotAPI/libraries/aron/core/test/aron/DictTest.aron.generated.h> -#include <RobotAPI/libraries/aron/core/test/aron/PrimitiveTest.aron.generated.h> -#include <RobotAPI/libraries/aron/core/test/aron/ObjectTest.aron.generated.h> -#include <RobotAPI/libraries/aron/core/test/aron/ImageTest.aron.generated.h> -#include <RobotAPI/libraries/aron/core/test/aron/MatrixTest.aron.generated.h> -#include <RobotAPI/libraries/aron/core/test/aron/QuaternionTest.aron.generated.h> -#include <RobotAPI/libraries/aron/core/test/aron/PointCloudTest.aron.generated.h> -#include <RobotAPI/libraries/aron/core/test/aron/PositionTest.aron.generated.h> -#include <RobotAPI/libraries/aron/core/test/aron/OrientationTest.aron.generated.h> -#include <RobotAPI/libraries/aron/core/test/aron/PoseTest.aron.generated.h> -#include <RobotAPI/libraries/aron/core/test/aron/EnumTest.aron.generated.h> -#include <RobotAPI/libraries/aron/core/test/aron/OptionalTest.aron.generated.h> +#include <RobotAPI/libraries/aron/codegeneration/test/aron/TemplateTest.aron.generated.h> +#include <RobotAPI/libraries/aron/codegeneration/test/aron/AnyTest.aron.generated.h> +#include <RobotAPI/libraries/aron/codegeneration/test/aron/ListTest.aron.generated.h> +#include <RobotAPI/libraries/aron/codegeneration/test/aron/DictTest.aron.generated.h> +#include <RobotAPI/libraries/aron/codegeneration/test/aron/PrimitiveTest.aron.generated.h> +#include <RobotAPI/libraries/aron/codegeneration/test/aron/ObjectTest.aron.generated.h> +#include <RobotAPI/libraries/aron/codegeneration/test/aron/ImageTest.aron.generated.h> +#include <RobotAPI/libraries/aron/codegeneration/test/aron/MatrixTest.aron.generated.h> +#include <RobotAPI/libraries/aron/codegeneration/test/aron/QuaternionTest.aron.generated.h> +#include <RobotAPI/libraries/aron/codegeneration/test/aron/PointCloudTest.aron.generated.h> +#include <RobotAPI/libraries/aron/codegeneration/test/aron/PositionTest.aron.generated.h> +#include <RobotAPI/libraries/aron/codegeneration/test/aron/OrientationTest.aron.generated.h> +#include <RobotAPI/libraries/aron/codegeneration/test/aron/PoseTest.aron.generated.h> +#include <RobotAPI/libraries/aron/codegeneration/test/aron/EnumTest.aron.generated.h> +#include <RobotAPI/libraries/aron/codegeneration/test/aron/OptionalTest.aron.generated.h> +#include <RobotAPI/libraries/aron/codegeneration/test/aron/DtoTest.aron.generated.h> using namespace armarx; using namespace aron; @@ -266,7 +264,6 @@ BOOST_AUTO_TEST_CASE(AronCodeGenerationPrimitiveTest) 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()); } @@ -288,7 +285,7 @@ BOOST_AUTO_TEST_CASE(AronCodeGenerationOptionalTest) 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); + BOOST_CHECK_EQUAL(aronType->getMemberType("some_float")->getMaybe(), aron::type::Maybe::OPTIONAL); BOOST_CHECK(not p.some_float.has_value()); auto aron = p.toAron(); diff --git a/source/RobotAPI/libraries/aron/core/test/aronExtendsTest.cpp b/source/RobotAPI/libraries/aron/codegeneration/test/aronExtendsTest.cpp similarity index 93% rename from source/RobotAPI/libraries/aron/core/test/aronExtendsTest.cpp rename to source/RobotAPI/libraries/aron/codegeneration/test/aronExtendsTest.cpp index 81a11bda2..df6735345 100644 --- a/source/RobotAPI/libraries/aron/core/test/aronExtendsTest.cpp +++ b/source/RobotAPI/libraries/aron/codegeneration/test/aronExtendsTest.cpp @@ -42,8 +42,8 @@ #include <RobotAPI/libraries/aron/core/data/variant/All.h> // Generated File -#include <RobotAPI/libraries/aron/core/test/aron/BaseClassTest.aron.generated.h> -#include <RobotAPI/libraries/aron/core/test/aron/DerivedClassTest.aron.generated.h> +#include <RobotAPI/libraries/aron/codegeneration/test/aron/BaseClassTest.aron.generated.h> +#include <RobotAPI/libraries/aron/codegeneration/test/aron/DerivedClassTest.aron.generated.h> using namespace armarx; using namespace aron; diff --git a/source/RobotAPI/libraries/aron/core/test/aronNavigateTest.cpp b/source/RobotAPI/libraries/aron/codegeneration/test/aronNavigateTest.cpp similarity index 95% rename from source/RobotAPI/libraries/aron/core/test/aronNavigateTest.cpp rename to source/RobotAPI/libraries/aron/codegeneration/test/aronNavigateTest.cpp index e7d0393c6..a21694073 100644 --- a/source/RobotAPI/libraries/aron/core/test/aronNavigateTest.cpp +++ b/source/RobotAPI/libraries/aron/codegeneration/test/aronNavigateTest.cpp @@ -38,11 +38,8 @@ #include <ArmarXCore/libraries/cppgen/CppClass.h> #include <RobotAPI/libraries/aron/core/Exception.h> -// Aron -#include <RobotAPI/libraries/aron/core/test/Randomizer.h> - // Generated File -#include <RobotAPI/libraries/aron/core/test/aron/NaturalIKTest.aron.generated.h> +#include <RobotAPI/libraries/aron/codegeneration/test/aron/NaturalIKTest.aron.generated.h> using namespace armarx; using namespace aron; diff --git a/source/RobotAPI/libraries/aron/core/test/aronOperatorTest.cpp b/source/RobotAPI/libraries/aron/codegeneration/test/aronOperatorTest.cpp similarity index 100% rename from source/RobotAPI/libraries/aron/core/test/aronOperatorTest.cpp rename to source/RobotAPI/libraries/aron/codegeneration/test/aronOperatorTest.cpp diff --git a/source/RobotAPI/libraries/aron/core/test/aronRandomizedTest.cpp b/source/RobotAPI/libraries/aron/codegeneration/test/aronRandomizedTest.cpp similarity index 100% rename from source/RobotAPI/libraries/aron/core/test/aronRandomizedTest.cpp rename to source/RobotAPI/libraries/aron/codegeneration/test/aronRandomizedTest.cpp diff --git a/source/RobotAPI/libraries/aron/core/typereader/Reader.h b/source/RobotAPI/libraries/aron/codegeneration/typereader/Reader.h similarity index 89% rename from source/RobotAPI/libraries/aron/core/typereader/Reader.h rename to source/RobotAPI/libraries/aron/codegeneration/typereader/Reader.h index c5e7b7234..31ab1c618 100644 --- a/source/RobotAPI/libraries/aron/core/typereader/Reader.h +++ b/source/RobotAPI/libraries/aron/codegeneration/typereader/Reader.h @@ -29,10 +29,10 @@ // ArmarX #include <RobotAPI/libraries/aron/core/type/variant/container/Object.h> -#include <RobotAPI/libraries/aron/core/codegenerator/helper/ReaderInfo.h> -#include <RobotAPI/libraries/aron/core/codegenerator/helper/WriterInfo.h> -#include <RobotAPI/libraries/aron/core/typereader/helper/GenerateTypeInfo.h> -#include <RobotAPI/libraries/aron/core/typereader/helper/GenerateIntEnumInfo.h> +#include <RobotAPI/libraries/aron/codegeneration/codegenerator/helper/ReaderInfo.h> +#include <RobotAPI/libraries/aron/codegeneration/codegenerator/helper/WriterInfo.h> +#include <RobotAPI/libraries/aron/codegeneration/typereader/helper/GenerateTypeInfo.h> +#include <RobotAPI/libraries/aron/codegeneration/typereader/helper/GenerateIntEnumInfo.h> namespace armarx::aron::typereader { diff --git a/source/RobotAPI/libraries/aron/core/typereader/helper/GenerateInfo.h b/source/RobotAPI/libraries/aron/codegeneration/typereader/helper/GenerateInfo.h similarity index 100% rename from source/RobotAPI/libraries/aron/core/typereader/helper/GenerateInfo.h rename to source/RobotAPI/libraries/aron/codegeneration/typereader/helper/GenerateInfo.h diff --git a/source/RobotAPI/libraries/aron/core/typereader/helper/GenerateIntEnumInfo.h b/source/RobotAPI/libraries/aron/codegeneration/typereader/helper/GenerateIntEnumInfo.h similarity index 100% rename from source/RobotAPI/libraries/aron/core/typereader/helper/GenerateIntEnumInfo.h rename to source/RobotAPI/libraries/aron/codegeneration/typereader/helper/GenerateIntEnumInfo.h diff --git a/source/RobotAPI/libraries/aron/core/typereader/helper/GenerateTypeInfo.h b/source/RobotAPI/libraries/aron/codegeneration/typereader/helper/GenerateTypeInfo.h similarity index 100% rename from source/RobotAPI/libraries/aron/core/typereader/helper/GenerateTypeInfo.h rename to source/RobotAPI/libraries/aron/codegeneration/typereader/helper/GenerateTypeInfo.h diff --git a/source/RobotAPI/libraries/aron/core/typereader/xml/Data.cpp b/source/RobotAPI/libraries/aron/codegeneration/typereader/xml/Data.cpp similarity index 98% rename from source/RobotAPI/libraries/aron/core/typereader/xml/Data.cpp rename to source/RobotAPI/libraries/aron/codegeneration/typereader/xml/Data.cpp index 1c84a04f5..3a7ba2a06 100644 --- a/source/RobotAPI/libraries/aron/core/typereader/xml/Data.cpp +++ b/source/RobotAPI/libraries/aron/codegeneration/typereader/xml/Data.cpp @@ -61,7 +61,7 @@ namespace armarx::aron::typereader::xml return node.attribute_value(att.c_str()); } - std::string util::GetAttributeWithDefault(const armarx::RapidXmlReaderNode& node, const std::string& att, const std::string def) + std::string util::GetAttributeWithDefault(const armarx::RapidXmlReaderNode& node, const std::string& att, const std::string& def) { if (!(HasAttribute(node, att))) { diff --git a/source/RobotAPI/libraries/aron/core/typereader/xml/Data.h b/source/RobotAPI/libraries/aron/codegeneration/typereader/xml/Data.h similarity index 92% rename from source/RobotAPI/libraries/aron/core/typereader/xml/Data.h rename to source/RobotAPI/libraries/aron/codegeneration/typereader/xml/Data.h index 7675e7151..bc1a43705 100644 --- a/source/RobotAPI/libraries/aron/core/typereader/xml/Data.h +++ b/source/RobotAPI/libraries/aron/codegeneration/typereader/xml/Data.h @@ -99,22 +99,22 @@ namespace armarx::aron::typereader::xml const std::string DOUBLE_TAG = "double"; const std::string STRING_TAG = "string"; const std::string BOOL_TAG = "bool"; - const std::string DATE_TIME_TAG = "datetime"; const std::string ANY_OBJECT_TAG = "anyobject"; // others - const std::string WHATEVER_VALUE = "x"; + const std::vector<std::string> WHATEVER_VALUES = {"?"}; // Replacements ({tagName, {replacementsTag, additionalAronDTOInclude}}) - const std::map<std::string, std::pair<std::string, std::string>> REPLACEMENTS = { + const std::map<std::string, std::pair<std::string, std::string>> REPLACEMENTS = + { {"position", {"<matrix rows='3' cols='1' type='float32' />", ""}}, {"pose", {"<matrix rows='4' cols='4' type='float32' />", ""}}, {"orientation", {"<quaternion type='float32' />", ""}}, - // Legacy - {"time", {"<DateTime />", ""}} - // You can also add replacements for arondtos here! + {"datetime", {"<armarx::arondto::DateTime />", "<RobotAPI/libraries/aron/common/aron/time.xml>"}}, + {"time", {"<armarx::arondto::DateTime />", "<RobotAPI/libraries/aron/common/aron/time.xml>"}}, + {"duration", {"<armarx::arondto::Duration />", "<RobotAPI/libraries/aron/common/aron/time.xml>"}} }; } @@ -126,7 +126,7 @@ namespace armarx::aron::typereader::xml void EnforceAttribute(const RapidXmlReaderNode& node, const std::string& att); bool HasAttribute(const RapidXmlReaderNode& node, const std::string& att); std::string GetAttribute(const RapidXmlReaderNode& node, const std::string& att); - std::string GetAttributeWithDefault(const RapidXmlReaderNode& node, const std::string& att, const std::string def); + std::string GetAttributeWithDefault(const RapidXmlReaderNode& node, const std::string& att, const std::string& def); bool AttributeIsTrue(const RapidXmlReaderNode& node, const std::string& att); bool HasTagName(const RapidXmlReaderNode& node, const std::string& name); diff --git a/source/RobotAPI/libraries/aron/core/typereader/xml/Factory.cpp b/source/RobotAPI/libraries/aron/codegeneration/typereader/xml/Factory.cpp similarity index 76% rename from source/RobotAPI/libraries/aron/core/typereader/xml/Factory.cpp rename to source/RobotAPI/libraries/aron/codegeneration/typereader/xml/Factory.cpp index 8c54cfff8..5eebd6d76 100644 --- a/source/RobotAPI/libraries/aron/core/typereader/xml/Factory.cpp +++ b/source/RobotAPI/libraries/aron/codegeneration/typereader/xml/Factory.cpp @@ -42,25 +42,24 @@ namespace armarx::aron::typereader::xml { static const std::map<std::string, type::Descriptor> String2Descriptor = { - {constantes::LIST_TAG, type::Descriptor::eList}, - {constantes::OBJECT_TAG, type::Descriptor::eObject}, - {constantes::TUPLE_TAG, type::Descriptor::eTuple}, - {constantes::PAIR_TAG, type::Descriptor::ePair}, - {constantes::DICT_TAG, type::Descriptor::eDict}, - {constantes::NDARRAY_TAG, type::Descriptor::eNDArray}, - {constantes::MATRIX_TAG, type::Descriptor::eMatrix}, - {constantes::QUATERNION_TAG, type::Descriptor::eQuaternion}, - {constantes::POINT_CLOUD_TAG, type::Descriptor::ePointCloud}, - {constantes::IMAGE_TAG, type::Descriptor::eImage}, - {constantes::INT_ENUM_TAG, type::Descriptor::eIntEnum}, - {constantes::INT_TAG, type::Descriptor::eInt}, - {constantes::LONG_TAG, type::Descriptor::eLong}, - {constantes::FLOAT_TAG, type::Descriptor::eFloat}, - {constantes::DOUBLE_TAG, type::Descriptor::eDouble}, - {constantes::STRING_TAG, type::Descriptor::eString}, - {constantes::BOOL_TAG, type::Descriptor::eBool}, - {constantes::DATE_TIME_TAG, type::Descriptor::eDateTime}, - {constantes::ANY_OBJECT_TAG, type::Descriptor::eAnyObject} + {constantes::LIST_TAG, type::Descriptor::LIST}, + {constantes::OBJECT_TAG, type::Descriptor::OBJECT}, + {constantes::TUPLE_TAG, type::Descriptor::TUPLE}, + {constantes::PAIR_TAG, type::Descriptor::PAIR}, + {constantes::DICT_TAG, type::Descriptor::DICT}, + {constantes::NDARRAY_TAG, type::Descriptor::NDARRAY}, + {constantes::MATRIX_TAG, type::Descriptor::MATRIX}, + {constantes::QUATERNION_TAG, type::Descriptor::QUATERNION}, + {constantes::POINT_CLOUD_TAG, type::Descriptor::POINTCLOUD}, + {constantes::IMAGE_TAG, type::Descriptor::IMAGE}, + {constantes::INT_ENUM_TAG, type::Descriptor::INT_ENUM}, + {constantes::INT_TAG, type::Descriptor::INT}, + {constantes::LONG_TAG, type::Descriptor::LONG}, + {constantes::FLOAT_TAG, type::Descriptor::FLOAT}, + {constantes::DOUBLE_TAG, type::Descriptor::DOUBLE}, + {constantes::STRING_TAG, type::Descriptor::STRING}, + {constantes::BOOL_TAG, type::Descriptor::BOOL}, + {constantes::ANY_OBJECT_TAG, type::Descriptor::ANY_OBJECT} }; RapidXmlReaderNode nodeToUse = node; @@ -77,29 +76,28 @@ namespace armarx::aron::typereader::xml std::string nodeNameToUse = nodeToUse.name(); auto it = String2Descriptor.find(tagToUse); - auto descriptor = (it == String2Descriptor.end() ? type::Descriptor::eUnknown : it->second); + auto descriptor = (it == String2Descriptor.end() ? type::Descriptor::UNKNOWN : it->second); switch(descriptor) { - case type::Descriptor::eList: return createList(nodeToUse, path); - case type::Descriptor::eDict: return createDict(nodeToUse, path); - case type::Descriptor::eObject: return createObject(nodeToUse, path); - case type::Descriptor::eTuple: return createTuple(nodeToUse, path); - case type::Descriptor::ePair: return createPair(nodeToUse, path); - case type::Descriptor::eNDArray: return createNDArray(nodeToUse, path); - case type::Descriptor::eMatrix: return createMatrix(nodeToUse, path); - case type::Descriptor::eQuaternion: return createQuaternion(nodeToUse, path); - case type::Descriptor::eImage: return createImage(nodeToUse, path); - case type::Descriptor::ePointCloud: return createPointCloud(nodeToUse, path); - case type::Descriptor::eIntEnum: return createIntEnum(nodeToUse, path); - case type::Descriptor::eInt: return createInt(nodeToUse, path); - case type::Descriptor::eLong: return createLong(nodeToUse, path); - case type::Descriptor::eFloat: return createFloat(nodeToUse, path); - case type::Descriptor::eDouble: return createDouble(nodeToUse, path); - case type::Descriptor::eString: return createString(nodeToUse, path); - case type::Descriptor::eBool: return createBool(nodeToUse, path); - case type::Descriptor::eDateTime: return createTime(nodeToUse, path); - case type::Descriptor::eAnyObject: return createAnyObject(nodeToUse, path); + case type::Descriptor::LIST: return createList(nodeToUse, path); + case type::Descriptor::DICT: return createDict(nodeToUse, path); + case type::Descriptor::OBJECT: return createObject(nodeToUse, path); + case type::Descriptor::TUPLE: return createTuple(nodeToUse, path); + case type::Descriptor::PAIR: return createPair(nodeToUse, path); + case type::Descriptor::NDARRAY: return createNDArray(nodeToUse, path); + case type::Descriptor::MATRIX: return createMatrix(nodeToUse, path); + case type::Descriptor::QUATERNION: return createQuaternion(nodeToUse, path); + case type::Descriptor::IMAGE: return createImage(nodeToUse, path); + case type::Descriptor::POINTCLOUD: return createPointCloud(nodeToUse, path); + case type::Descriptor::INT_ENUM: return createIntEnum(nodeToUse, path); + case type::Descriptor::INT: return createInt(nodeToUse, path); + case type::Descriptor::LONG: return createLong(nodeToUse, path); + case type::Descriptor::FLOAT: return createFloat(nodeToUse, path); + case type::Descriptor::DOUBLE: return createDouble(nodeToUse, path); + case type::Descriptor::STRING: return createString(nodeToUse, path); + case type::Descriptor::BOOL: return createBool(nodeToUse, path); + case type::Descriptor::ANY_OBJECT: return createAnyObject(nodeToUse, path); default: return findExistingObject(nodeNameToUse); } } @@ -122,20 +120,20 @@ namespace armarx::aron::typereader::xml return v; } - const auto public_unk_it = std::find(allPreviouslyKnownPublicTypes.begin(), allPreviouslyKnownPublicTypes.end(), name); - if(public_unk_it != allPreviouslyKnownPublicTypes.end()) + const auto public_known_it = std::find(allPreviouslyKnownPublicTypes.begin(), allPreviouslyKnownPublicTypes.end(), name); + if(public_known_it != allPreviouslyKnownPublicTypes.end()) { // create an empty navigator - auto v = std::make_shared<aron::type::Object>(*public_unk_it); + auto v = std::make_shared<aron::type::Object>(*public_known_it); return v; } // only works during generation process (not for top-level) - const auto public_priv_it = std::find(allPreviouslyKnownPrivateTypes.begin(), allPreviouslyKnownPrivateTypes.end(), name); - if(public_priv_it != allPreviouslyKnownPrivateTypes.end()) + const auto private_known_it = std::find(allPreviouslyKnownPrivateTypes.begin(), allPreviouslyKnownPrivateTypes.end(), name); + if(private_known_it != allPreviouslyKnownPrivateTypes.end()) { // create an empty navigator - auto v = std::make_shared<aron::type::Object>(*public_priv_it); + auto v = std::make_shared<aron::type::Object>(*private_known_it); return v; } @@ -146,21 +144,21 @@ namespace armarx::aron::typereader::xml { if (util::AttributeIsTrue(n, constantes::OPTIONAL_NAME)) { - return type::Maybe::eOptional; + return type::Maybe::OPTIONAL; } if (util::AttributeIsTrue(n, constantes::RAW_PTR_NAME)) { - return type::Maybe::eRawPointer; + return type::Maybe::RAW_PTR; } if (util::AttributeIsTrue(n, constantes::SHARED_PTR_NAME)) { - return type::Maybe::eSharedPointer; + return type::Maybe::SHARED_PTR; } if (util::AttributeIsTrue(n, constantes::UNIQUE_PTR_NAME)) { - return type::Maybe::eUniquePointer; + return type::Maybe::UNIQUE_PTR; } - return type::Maybe::eNone; + return type::Maybe::NONE; } void ReaderFactory::checkObjectMemberName(const std::string& s) const @@ -219,7 +217,7 @@ namespace armarx::aron::typereader::xml auto maybe = getMaybe(children[0]); type::VariantPtr childNavigator = create(children[0], path.withElement(key)); - if (childNavigator->getDescriptor() == aron::type::Descriptor::eObject) + if (childNavigator->getDescriptor() == aron::type::Descriptor::OBJECT) { // check if template args are present std::vector<std::string> templates = simox::alg::split(util::GetAttributeWithDefault(children[0], constantes::TEMPLATE_ATTRIBUTE_NAME, ""), ","); @@ -322,14 +320,14 @@ namespace armarx::aron::typereader::xml { static const std::map<std::string, type::ndarray::ElementType> String2NDArrayType = { - {"int8", type::ndarray::ElementType::int8}, - {"int16", type::ndarray::ElementType::int16}, - {"int32", type::ndarray::ElementType::int32}, - {"uint8", type::ndarray::ElementType::uint8}, - {"uint16", type::ndarray::ElementType::uint16}, - {"uint32", type::ndarray::ElementType::uint32}, - {"float32", type::ndarray::ElementType::float32}, - {"float64", type::ndarray::ElementType::float64} + {"int8", type::ndarray::ElementType::INT8}, + {"int16", type::ndarray::ElementType::INT16}, + {"int32", type::ndarray::ElementType::INT32}, + {"uint8", type::ndarray::ElementType::UINT8}, + {"uint16", type::ndarray::ElementType::UINT16}, + {"uint32", type::ndarray::ElementType::UINT32}, + {"float32", type::ndarray::ElementType::FLOAT32}, + {"float64", type::ndarray::ElementType::FLOAT64} }; return nullptr; @@ -339,11 +337,11 @@ namespace armarx::aron::typereader::xml { static const std::map<std::string, type::matrix::ElementType> String2MatrixType = { - {"int16", type::matrix::ElementType::int16}, - {"int32", type::matrix::ElementType::int32}, - {"int64", type::matrix::ElementType::int64}, - {"float32", type::matrix::ElementType::float32}, - {"float64", type::matrix::ElementType::float64} + {"int16", type::matrix::ElementType::INT16}, + {"int32", type::matrix::ElementType::INT32}, + {"int64", type::matrix::ElementType::INT64}, + {"float32", type::matrix::ElementType::FLOAT32}, + {"float64", type::matrix::ElementType::FLOAT64} }; auto o = std::make_shared<type::Matrix>(path); @@ -353,11 +351,11 @@ namespace armarx::aron::typereader::xml auto rows_str = util::GetAttributeWithDefault(node, constantes::ROWS_ATTRIBUTE_NAME, "4"); auto cols_str = util::GetAttributeWithDefault(node, constantes::COLS_ATTRIBUTE_NAME, "4"); - if (simox::alg::to_lower(rows_str) == constantes::WHATEVER_VALUE) + if (std::find(constantes::WHATEVER_VALUES.begin(), constantes::WHATEVER_VALUES.end(), simox::alg::to_lower(rows_str)) != constantes::WHATEVER_VALUES.end()) { rows_str = "-1"; } - if (simox::alg::to_lower(cols_str) == constantes::WHATEVER_VALUE) + if (std::find(constantes::WHATEVER_VALUES.begin(), constantes::WHATEVER_VALUES.end(), simox::alg::to_lower(cols_str)) != constantes::WHATEVER_VALUES.end()) { cols_str = "-1"; } @@ -383,8 +381,8 @@ namespace armarx::aron::typereader::xml { static const std::map<std::string, type::quaternion::ElementType> String2QuaternionType = { - {"float32", type::quaternion::ElementType::float32}, - {"float64", type::quaternion::ElementType::float64} + {"float32", type::quaternion::ElementType::FLOAT32}, + {"float64", type::quaternion::ElementType::FLOAT64} }; auto o = std::make_shared<type::Quaternion>(path); @@ -409,8 +407,8 @@ namespace armarx::aron::typereader::xml { static const std::map<std::string, type::image::PixelType> String2PixelType = { - {"rgb24", type::image::PixelType::rgb24}, - {"depth32", type::image::PixelType::depth32} + {"rgb24", type::image::PixelType::RGB24}, + {"depth32", type::image::PixelType::DEPTH32} }; auto o = std::make_shared<type::Image>(path); @@ -434,13 +432,13 @@ namespace armarx::aron::typereader::xml { static const std::map<std::string, type::pointcloud::VoxelType> String2VoxelType = { - {"pointxyz", type::pointcloud::VoxelType::PointXYZ}, - {"pointxyzi", type::pointcloud::VoxelType::PointXYZI}, - {"pointxyzl", type::pointcloud::VoxelType::PointXYZL}, - {"pointxyzrgb", type::pointcloud::VoxelType::PointXYZRGB}, - {"pointxyzrgbl", type::pointcloud::VoxelType::PointXYZRGBL}, - {"pointxyzrgba", type::pointcloud::VoxelType::PointXYZRGBA}, - {"pointxyzhsv", type::pointcloud::VoxelType::PointXYZHSV} + {"pointxyz", type::pointcloud::VoxelType::POINT_XYZ}, + {"pointxyzi", type::pointcloud::VoxelType::POINT_XYZI}, + {"pointxyzl", type::pointcloud::VoxelType::POINT_XYZL}, + {"pointxyzrgb", type::pointcloud::VoxelType::POINT_XYZRGB}, + {"pointxyzrgbl", type::pointcloud::VoxelType::POINT_XYZRGBL}, + {"pointxyzrgba", type::pointcloud::VoxelType::POINT_XYZRGBA}, + {"pointxyzhsv", type::pointcloud::VoxelType::POINT_XYZHSV} }; auto o = std::make_shared<type::PointCloud>(path); @@ -530,11 +528,6 @@ namespace armarx::aron::typereader::xml return std::make_shared<type::Bool>(path); } - type::VariantPtr ReaderFactory::createTime(const RapidXmlReaderNode &node, const Path &path) const - { - return std::make_shared<type::DateTime>(path); - } - type::VariantPtr ReaderFactory::createAnyObject(const RapidXmlReaderNode& node, const Path& path) const { return std::make_shared<type::AnyObject>(path); diff --git a/source/RobotAPI/libraries/aron/core/typereader/xml/Factory.h b/source/RobotAPI/libraries/aron/codegeneration/typereader/xml/Factory.h similarity index 94% rename from source/RobotAPI/libraries/aron/core/typereader/xml/Factory.h rename to source/RobotAPI/libraries/aron/codegeneration/typereader/xml/Factory.h index a15c84116..814349d16 100644 --- a/source/RobotAPI/libraries/aron/core/typereader/xml/Factory.h +++ b/source/RobotAPI/libraries/aron/codegeneration/typereader/xml/Factory.h @@ -31,8 +31,8 @@ // ArmarX #include <ArmarXCore/core/rapidxml/wrapper/RapidXmlReader.h> -#include <RobotAPI/libraries/aron/core/typereader/helper/GenerateTypeInfo.h> -#include <RobotAPI/libraries/aron/core/typereader/helper/GenerateIntEnumInfo.h> +#include <RobotAPI/libraries/aron/codegeneration/typereader/helper/GenerateTypeInfo.h> +#include <RobotAPI/libraries/aron/codegeneration/typereader/helper/GenerateIntEnumInfo.h> #include <RobotAPI/libraries/aron/core/type/variant/Variant.h> @@ -83,7 +83,6 @@ namespace armarx::aron::typereader::xml type::VariantPtr createDouble(const RapidXmlReaderNode& node, const Path& path) const; type::VariantPtr createString(const RapidXmlReaderNode& node, const Path& path) const; type::VariantPtr createBool(const RapidXmlReaderNode& node, const Path& path) const; - type::VariantPtr createTime(const RapidXmlReaderNode& node, const Path& path) const; type::VariantPtr createAnyObject(const RapidXmlReaderNode& node, const Path& path) const; diff --git a/source/RobotAPI/libraries/aron/core/typereader/xml/Reader.cpp b/source/RobotAPI/libraries/aron/codegeneration/typereader/xml/Reader.cpp similarity index 97% rename from source/RobotAPI/libraries/aron/core/typereader/xml/Reader.cpp rename to source/RobotAPI/libraries/aron/codegeneration/typereader/xml/Reader.cpp index 92180e61e..3f7d947e0 100644 --- a/source/RobotAPI/libraries/aron/core/typereader/xml/Reader.cpp +++ b/source/RobotAPI/libraries/aron/codegeneration/typereader/xml/Reader.cpp @@ -31,7 +31,7 @@ #include <ArmarXCore/core/rapidxml/wrapper/RapidXmlReader.h> #include <ArmarXCore/core/system/cmake/CMakePackageFinder.h> -#include <RobotAPI/libraries/aron/core/typereader/xml/Data.h> +#include <RobotAPI/libraries/aron/codegeneration/typereader/xml/Data.h> #include <RobotAPI/libraries/aron/core/type/variant/Factory.h> @@ -217,6 +217,12 @@ namespace armarx::aron::typereader::xml } // else path is absolute + // check if referred file is same as current file. If so, abort. + if (resolved_absolute_path == filePath) + { + return ""; + } + // parse parent xml file and add objects to alreday known Reader anotherReader; anotherReader.parseFile(resolved_absolute_path); diff --git a/source/RobotAPI/libraries/aron/core/typereader/xml/Reader.h b/source/RobotAPI/libraries/aron/codegeneration/typereader/xml/Reader.h similarity index 94% rename from source/RobotAPI/libraries/aron/core/typereader/xml/Reader.h rename to source/RobotAPI/libraries/aron/codegeneration/typereader/xml/Reader.h index da63cb5cd..e68615489 100644 --- a/source/RobotAPI/libraries/aron/core/typereader/xml/Reader.h +++ b/source/RobotAPI/libraries/aron/codegeneration/typereader/xml/Reader.h @@ -30,14 +30,14 @@ // Base Class -#include <RobotAPI/libraries/aron/core/typereader/Reader.h> +#include <RobotAPI/libraries/aron/codegeneration/typereader/Reader.h> // ArmarX #include <SimoxUtility/xml.h> #include <ArmarXCore/core/rapidxml/wrapper/RapidXmlReader.h> #include <RobotAPI/libraries/aron/core/type/variant/container/Object.h> -#include <RobotAPI/libraries/aron/core/typereader/xml/Factory.h> +#include <RobotAPI/libraries/aron/codegeneration/typereader/xml/Factory.h> namespace armarx::aron::typereader::xml { diff --git a/source/RobotAPI/libraries/aron/codegenerationhelper/AronCodeGenerator.cpp b/source/RobotAPI/libraries/aron/codegenerationhelper/AronCodeGenerator.cpp deleted file mode 100644 index b1726ae05..000000000 --- a/source/RobotAPI/libraries/aron/codegenerationhelper/AronCodeGenerator.cpp +++ /dev/null @@ -1,39 +0,0 @@ -/* - * This file is part of ArmarX. - * - * Copyright (C) 2012-2016, High Performance Humanoid Technologies (H2T), - * Karlsruhe Institute of Technology (KIT), all rights reserved. - * - * ArmarX is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License version 2 as - * published by the Free Software Foundation. - * - * ArmarX is distributed in the hope that it will be useful, but - * WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see <http://www.gnu.org/licenses/>. - * - * @author Fabian Peller-Konrad (fabian dot peller-konrad at kit dot edu) - * @copyright http://www.gnu.org/licenses/gpl-2.0.txt - * GNU General Public License - */ - -// STD/STL - - -// Header -#include "AronCodeGenerator.h" - -namespace armarx -{ - namespace aron - { - namespace codegenerator::cpp - { - - } - } -} diff --git a/source/RobotAPI/libraries/aron/codegenerationhelper/AronCodeGenerator.h b/source/RobotAPI/libraries/aron/codegenerationhelper/AronCodeGenerator.h deleted file mode 100644 index 8783ca562..000000000 --- a/source/RobotAPI/libraries/aron/codegenerationhelper/AronCodeGenerator.h +++ /dev/null @@ -1,50 +0,0 @@ -/* -* This file is part of ArmarX. -* -* ArmarX is free software; you can redistribute it and/or modify -* it under the terms of the GNU General Public License version 2 as -* published by the Free Software Foundation. -* -* ArmarX is distributed in the hope that it will be useful, but -* WITHOUT ANY WARRANTY; without even the implied warranty of -* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -* GNU General Public License for more details. -* -* You should have received a copy of the GNU General Public License -* along with this program. If not, see <http://www.gnu.org/licenses/>. -* -* @author Fabian Peller (fabian dot peller at kit dot edu) -* @copyright http://www.gnu.org/licenses/gpl-2.0.txt -* GNU General Public License -*/ - -#pragma once - -// STD/STL -#include <memory> -#include <string> - -// ArmarX -#include <RobotAPI/interface/aron.h> - - -namespace armarx -{ - namespace aron - { - namespace codegenerator::cpp - { - /* This is just a dummy class to create a target which depends on the aron code generator executable. */ - class AronCodeGenerator; - typedef std::shared_ptr<AronCodeGenerator> AronCodeGeneratorPtr; - - class AronCodeGenerator - { - public: - AronCodeGenerator() = default; - - private: - }; - } - } -} diff --git a/source/RobotAPI/libraries/aron/codegenerationhelper/CMakeLists.txt b/source/RobotAPI/libraries/aron/codegenerationhelper/CMakeLists.txt deleted file mode 100644 index 588385597..000000000 --- a/source/RobotAPI/libraries/aron/codegenerationhelper/CMakeLists.txt +++ /dev/null @@ -1,20 +0,0 @@ -set(LIB_NAME aroncodegeneration) - -armarx_component_set_name("${LIB_NAME}") -armarx_set_target("Library: ${LIB_NAME}") - - -set(LIBS - aron -) - -set(LIB_FILES - AronCodeGenerator.cpp -) - -set(LIB_HEADERS - AronCodeGenerator.h -) - -armarx_add_library("${LIB_NAME}" "${LIB_FILES}" "${LIB_HEADERS}" "${LIBS}") -#add_dependencies("${LIB_NAME}" AronCodeGeneratorAppRun) diff --git a/source/RobotAPI/libraries/aron/common/CMakeLists.txt b/source/RobotAPI/libraries/aron/common/CMakeLists.txt index ab0f5bb86..14e5a0305 100644 --- a/source/RobotAPI/libraries/aron/common/CMakeLists.txt +++ b/source/RobotAPI/libraries/aron/common/CMakeLists.txt @@ -17,12 +17,12 @@ armarx_add_library( json_conversions.h aron_conversions/core.h + aron_conversions/stl.h aron_conversions/packagepath.h aron_conversions/framed.h aron_conversions/time.h aron_conversions/armarx.h aron_conversions/simox.h - aron_conversions/stl.h aron_conversions/eigen.h json_conversions/armarx.h @@ -32,12 +32,12 @@ armarx_add_library( SOURCES aron_conversions/core.cpp + aron_conversions/stl.cpp aron_conversions/packagepath.cpp aron_conversions/framed.cpp aron_conversions/time.cpp aron_conversions/armarx.cpp aron_conversions/simox.cpp - aron_conversions/stl.cpp aron_conversions/eigen.cpp json_conversions/armarx.cpp diff --git a/source/RobotAPI/libraries/aron/common/aron_conversions.h b/source/RobotAPI/libraries/aron/common/aron_conversions.h index b771ef362..84804124d 100644 --- a/source/RobotAPI/libraries/aron/common/aron_conversions.h +++ b/source/RobotAPI/libraries/aron/common/aron_conversions.h @@ -1,8 +1,5 @@ #pragma once -#include "aron_conversions/core.h" - #include "aron_conversions/armarx.h" #include "aron_conversions/simox.h" -#include "aron_conversions/stl.h" #include "aron_conversions/eigen.h" diff --git a/source/RobotAPI/libraries/aron/common/aron_conversions/core.cpp b/source/RobotAPI/libraries/aron/common/aron_conversions/core.cpp index 790714d9c..44426a551 100644 --- a/source/RobotAPI/libraries/aron/common/aron_conversions/core.cpp +++ b/source/RobotAPI/libraries/aron/common/aron_conversions/core.cpp @@ -1,2 +1 @@ #include "core.h" - diff --git a/source/RobotAPI/libraries/aron/common/aron_conversions/core.h b/source/RobotAPI/libraries/aron/common/aron_conversions/core.h index bcc537a28..af62fb4fa 100644 --- a/source/RobotAPI/libraries/aron/common/aron_conversions/core.h +++ b/source/RobotAPI/libraries/aron/common/aron_conversions/core.h @@ -1,81 +1,12 @@ #pragma once +// This file is just a legacy include file. +// We moved the stl and core conversions to the aron library. +#include <RobotAPI/libraries/aron/core/aron_conversions.h> -namespace armarx::aron +namespace armarx { - /** - * Framework for converting ARON DTOs (Data Transfer Objects) to C++ BOs - * (Business Objects) and back. - * - * To allow conversion between custom ARON and C++ types, declare two - * functions in the namespace of the BO: - * - * @code - * // aron_conversions.h - * - * namespace bo_namespace - * { - * void toAron(arondto::MyObject& dto, const MyObject& bo); - * void fromAron(const arondto::MyObject& dto, MyObject& bo); - * } - * @endcode - * - * Note that the DTO always comes first, and the target object is - * non-const. - * - * In the implementation, - * - * - * @code - * // aron_conversions.cpp - * - * #include "aron_conversions.h" - * #include <Path/to/MyValue/aron_conversions.h> - * - * void bo_namespace::toAron(arondto::MyObject& dto, const MyObject& bo) - * { - * dto.name = bo.name; - * toAron(dto.myValue, bo.myValue); - * } - * - * void bo_namespace::fromAron(const arondto::MyObject& dto, MyObject& bo) - * { - * bo.name = dto.name; - * fromAron(dto.myValue, bo.myValue); - * } - * @endcode - */ - // Same type - template <class T> - void toAron(T& dto, const T& bo) - { - dto = bo; - } - template <class T> - void fromAron(const T& dto, T& bo) - { - bo = dto; - } - - - // Generic return version - - template <class DtoT, class BoT> - DtoT toAron(const BoT& bo) - { - DtoT dto; - toAron(dto, bo); - return dto; - } - template <class BoT, class DtoT> - BoT fromAron(const DtoT& dto) - { - BoT bo; - fromAron(dto, bo); - return bo; - } - -} +} // namespace armarx diff --git a/source/RobotAPI/libraries/aron/common/aron_conversions/eigen.h b/source/RobotAPI/libraries/aron/common/aron_conversions/eigen.h index 3ace8f400..e60f080c8 100644 --- a/source/RobotAPI/libraries/aron/common/aron_conversions/eigen.h +++ b/source/RobotAPI/libraries/aron/common/aron_conversions/eigen.h @@ -2,6 +2,8 @@ #include <Eigen/Geometry> +#include <RobotAPI/libraries/aron/core/aron_conversions.h> + namespace armarx::aron { using AronPose = Eigen::Matrix<float, 4, 4>; diff --git a/source/RobotAPI/libraries/aron/common/aron_conversions/framed.h b/source/RobotAPI/libraries/aron/common/aron_conversions/framed.h index f6ad31338..f7c53ac77 100644 --- a/source/RobotAPI/libraries/aron/common/aron_conversions/framed.h +++ b/source/RobotAPI/libraries/aron/common/aron_conversions/framed.h @@ -1,5 +1,7 @@ #pragma once +#include <RobotAPI/libraries/aron/core/aron_conversions.h> + #include <RobotAPI/libraries/aron/common/aron/framed.aron.generated.h> namespace armarx diff --git a/source/RobotAPI/libraries/aron/common/aron_conversions/packagepath.h b/source/RobotAPI/libraries/aron/common/aron_conversions/packagepath.h index ed2e3f5ef..a5661de19 100644 --- a/source/RobotAPI/libraries/aron/common/aron_conversions/packagepath.h +++ b/source/RobotAPI/libraries/aron/common/aron_conversions/packagepath.h @@ -1,5 +1,7 @@ #pragma once +#include <RobotAPI/libraries/aron/core/aron_conversions.h> + #include <ArmarXCore/core/PackagePath.h> #include <RobotAPI/libraries/aron/common/aron/PackagePath.aron.generated.h> diff --git a/source/RobotAPI/libraries/aron/common/aron_conversions/simox.h b/source/RobotAPI/libraries/aron/common/aron_conversions/simox.h index 5440ac1c6..68a7fada4 100644 --- a/source/RobotAPI/libraries/aron/common/aron_conversions/simox.h +++ b/source/RobotAPI/libraries/aron/common/aron_conversions/simox.h @@ -1,5 +1,7 @@ #pragma once +#include <RobotAPI/libraries/aron/core/aron_conversions.h> + #include <SimoxUtility/color/Color.h> #include <SimoxUtility/shapes/AxisAlignedBoundingBox.h> #include <SimoxUtility/shapes/OrientedBox.h> diff --git a/source/RobotAPI/libraries/aron/common/aron_conversions/stl.cpp b/source/RobotAPI/libraries/aron/common/aron_conversions/stl.cpp index 857d161ec..44426a551 100644 --- a/source/RobotAPI/libraries/aron/common/aron_conversions/stl.cpp +++ b/source/RobotAPI/libraries/aron/common/aron_conversions/stl.cpp @@ -1 +1 @@ -#include "stl.h" +#include "core.h" diff --git a/source/RobotAPI/libraries/aron/common/aron_conversions/stl.h b/source/RobotAPI/libraries/aron/common/aron_conversions/stl.h index 9a593f3c7..af62fb4fa 100644 --- a/source/RobotAPI/libraries/aron/common/aron_conversions/stl.h +++ b/source/RobotAPI/libraries/aron/common/aron_conversions/stl.h @@ -1,197 +1,12 @@ #pragma once -#include <map> -#include <memory> -#include <optional> -#include <vector> +// This file is just a legacy include file. +// We moved the stl and core conversions to the aron library. -#include "core.h" +#include <RobotAPI/libraries/aron/core/aron_conversions.h> - -namespace armarx::aron +namespace armarx { - // std::unique_ptr - - template <class DtoT, class BoT> - void toAron(DtoT& dto, const std::unique_ptr<BoT>& bo) - { - if (bo) - { - toAron(dto, *bo); - } - } - template <class DtoT, class BoT> - void fromAron(const DtoT& dto, std::unique_ptr<BoT>& bo) - { - bo = std::make_unique<BoT>(); - fromAron(dto, *bo); - } - - - // std::optional - - template <class DtoT, class BoT> - void toAron(std::optional<DtoT>& dto, const std::optional<BoT>& bo) - { - if (bo.has_value()) - { - dto = DtoT{}; - toAron(*dto, *bo); - } - else - { - dto = std::nullopt; - } - } - template <class DtoT, class BoT> - void fromAron(const std::optional<DtoT>& dto, std::optional<BoT>& bo) - { - if (dto.has_value()) - { - bo = BoT{}; - fromAron(*dto, *bo); - } - else - { - bo = std::nullopt; - } - } - - // Flag-controlled optional - template <class DtoT, class BoT> - void toAron(DtoT& dto, bool& dtoValid, const BoT& bo, bool boValid) - { - dtoValid = boValid; - if (boValid) - { - toAron(dto, bo); - } - else - { - dto = {}; - } - } - template <class DtoT, class BoT> - void fromAron(const DtoT& dto, bool dtoValid, BoT& bo, bool& boValid) - { - boValid = dtoValid; - if (dtoValid) - { - fromAron(dto, bo); - } - else - { - bo = {}; - } - } - - template <class DtoT, class BoT> - void toAron(DtoT& dto, bool& dtoValid, const std::optional<BoT>& bo) - { - dtoValid = bo.has_value(); - if (dtoValid) - { - toAron(dto, *bo); - } - else - { - dto = {}; - } - } - template <class DtoT, class BoT> - void fromAron(const DtoT& dto, bool dtoValid, std::optional<BoT>& bo) - { - if (dtoValid) - { - bo = BoT{}; - fromAron(dto, *bo); - } - else - { - bo = std::nullopt; - } - } - - // Helper concept to avoid ambiguities - template<typename DtoT, typename BoT> - concept DtoAndBoAreSame = std::is_same<DtoT, BoT>::value; - - - // std::vector - - template <class DtoT, class BoT> - requires (!DtoAndBoAreSame<DtoT, BoT>) - void toAron(std::vector<DtoT>& dtos, const std::vector<BoT>& bos) - { - dtos.clear(); - dtos.reserve(bos.size()); - for (const auto& bo : bos) - { - toAron(dtos.emplace_back(), bo); - } - } - template <class DtoT, class BoT> - requires (!DtoAndBoAreSame<DtoT, BoT>) - void fromAron(const std::vector<DtoT>& dtos, std::vector<BoT>& bos) - { - bos.clear(); - bos.reserve(dtos.size()); - for (const auto& dto : dtos) - { - fromAron(dto, bos.emplace_back()); - } - } - - template <class DtoT, class BoT> - requires (!DtoAndBoAreSame<DtoT, BoT>) - std::vector<DtoT> toAron(const std::vector<BoT>& bos) - { - std::vector<DtoT> dtos; - toAron(dtos, bos); - return dtos; - } - - - // std::map - - template <class DtoKeyT, class DtoValueT, class BoKeyT, class BoValueT> - requires (!(DtoAndBoAreSame<DtoKeyT, BoKeyT> and DtoAndBoAreSame<DtoValueT, BoValueT>)) - void toAron(std::map<DtoKeyT, DtoValueT>& dtoMap, - const std::map<BoKeyT, BoValueT>& boMap) - { - dtoMap.clear(); - for (const auto& [boKey, boValue] : boMap) - { - DtoKeyT dtoKey; - toAron(dtoKey, boKey); - auto [it, _] = dtoMap.emplace(std::move(dtoKey), DtoValueT{}); - toAron(it->second, boValue); - } - } - template <class DtoKeyT, class DtoValueT, class BoKeyT, class BoValueT> - requires (!(DtoAndBoAreSame<DtoKeyT, BoKeyT> and DtoAndBoAreSame<DtoValueT, BoValueT>)) - void fromAron(const std::map<DtoKeyT, DtoValueT>& dtoMap, - std::map<BoKeyT, BoValueT>& boMap) - { - boMap.clear(); - for (const auto& [dtoKey, dtoValue] : dtoMap) - { - BoKeyT boKey; - fromAron(dtoKey, boKey); - auto [it, _] = boMap.emplace(boKey, BoValueT{}); - fromAron(dtoValue, it->second); - } - } - - - template <class DtoKeyT, class DtoValueT, class BoKeyT, class BoValueT> - requires (!(DtoAndBoAreSame<DtoKeyT, BoKeyT> and DtoAndBoAreSame<DtoValueT, BoValueT>)) - std::map<DtoKeyT, DtoValueT> toAron(const std::map<BoKeyT, BoValueT>& boMap) - { - std::map<DtoKeyT, DtoValueT> dtoMap; - toAron(dtoMap, boMap); - return dtoMap; - } -} +} // namespace armarx diff --git a/source/RobotAPI/libraries/aron/common/aron_conversions/time.cpp b/source/RobotAPI/libraries/aron/common/aron_conversions/time.cpp index 97b674802..2ee681ca3 100644 --- a/source/RobotAPI/libraries/aron/common/aron_conversions/time.cpp +++ b/source/RobotAPI/libraries/aron/common/aron_conversions/time.cpp @@ -4,8 +4,7 @@ #include <ArmarXCore/core/time/ice_conversions.h> -#include <RobotAPI/libraries/aron/common/aron_conversions/core.h> -#include <RobotAPI/libraries/aron/common/aron_conversions/stl.h> +#include <RobotAPI/libraries/aron/common/aron/time.aron.generated.h> void IceUtil::fromAron(const long& dto, IceUtil::Time& bo) @@ -79,32 +78,24 @@ void armarx::toAron(arondto::Duration& dto, const Duration& bo) void armarx::fromAron(const arondto::Frequency& dto, Frequency& bo) { - Duration cycleDuration; - fromAron(dto.cycleDuration, cycleDuration); - bo = Frequency(cycleDuration); + bo = Frequency(dto.cycleDuration); } void armarx::toAron(arondto::Frequency& dto, const Frequency& bo) { - arondto::Duration cycleDuration; - toAron(cycleDuration, bo.toCycleDuration()); - dto.cycleDuration = cycleDuration; + dto.cycleDuration = bo.toCycleDuration(); } void armarx::fromAron(const arondto::DateTime& dto, DateTime& bo) { - Duration timeSinceEpoch; - fromAron(dto.timeSinceEpoch, timeSinceEpoch); ClockType clockType; fromAron(dto.clockType, clockType); - bo = DateTime(timeSinceEpoch, clockType, dto.hostname); + bo = DateTime(dto.timeSinceEpoch, clockType, dto.hostname); } void armarx::toAron(arondto::DateTime& dto, const DateTime& bo) { - arondto::Duration timeSinceEpoch; - toAron(timeSinceEpoch, bo.toDurationSinceEpoch()); - dto.timeSinceEpoch = timeSinceEpoch; + dto.timeSinceEpoch = bo.toDurationSinceEpoch(); arondto::ClockType clockType; toAron(clockType, bo.clockType()); dto.clockType = clockType; diff --git a/source/RobotAPI/libraries/aron/common/aron_conversions/time.h b/source/RobotAPI/libraries/aron/common/aron_conversions/time.h index 80ab36d7c..0ea9cb87a 100644 --- a/source/RobotAPI/libraries/aron/common/aron_conversions/time.h +++ b/source/RobotAPI/libraries/aron/common/aron_conversions/time.h @@ -1,9 +1,8 @@ #pragma once +#include <RobotAPI/libraries/aron/core/aron_conversions.h> #include <ArmarXCore/core/time_minimal.h> -#include <RobotAPI/libraries/aron/common/aron/time.aron.generated.h> - namespace IceUtil { @@ -24,6 +23,14 @@ namespace IceUtil } namespace armarx { + namespace arondto + { + class ClockType; + class Duration; + class Frequency; + class DateTime; + } + void fromAron(const arondto::ClockType& dto, ClockType& bo); void toAron(arondto::ClockType& dto, const ClockType& bo); diff --git a/source/RobotAPI/libraries/aron/common/test/MyCustomType.cpp b/source/RobotAPI/libraries/aron/common/test/MyCustomType.cpp index 6431732ee..3d4ba61b8 100644 --- a/source/RobotAPI/libraries/aron/common/test/MyCustomType.cpp +++ b/source/RobotAPI/libraries/aron/common/test/MyCustomType.cpp @@ -23,7 +23,7 @@ #include <ostream> -#include <RobotAPI/libraries/aron/common/aron_conversions/core.h> +#include <RobotAPI/libraries/aron/core/aron_conversions.h> template <class CustomTypeT> diff --git a/source/RobotAPI/libraries/aron/common/test/aron_common_test.cpp b/source/RobotAPI/libraries/aron/common/test/aron_common_test.cpp index 0503f0132..6c66ae28f 100644 --- a/source/RobotAPI/libraries/aron/common/test/aron_common_test.cpp +++ b/source/RobotAPI/libraries/aron/common/test/aron_common_test.cpp @@ -26,8 +26,7 @@ #include <RobotAPI/Test.h> -#include <RobotAPI/libraries/aron/common/aron_conversions/stl.h> -#include <RobotAPI/libraries/aron/common/aron_conversions/core.h> +#include <RobotAPI/libraries/aron/core/aron_conversions.h> #include <iostream> diff --git a/source/RobotAPI/libraries/aron/common/util/object_finders.h b/source/RobotAPI/libraries/aron/common/util/object_finders.h index ff67043de..879b2231c 100644 --- a/source/RobotAPI/libraries/aron/common/util/object_finders.h +++ b/source/RobotAPI/libraries/aron/common/util/object_finders.h @@ -27,7 +27,7 @@ #include <SimoxUtility/algorithm/string.h> -#include <RobotAPI/libraries/aron/common/aron_conversions/core.h> +#include <RobotAPI/libraries/aron/core/aron_conversions.h> #include <RobotAPI/libraries/aron/core/data/variant/container/Dict.h> #include <RobotAPI/libraries/aron/core/data/visitor/variant/VariantVisitor.h> diff --git a/source/RobotAPI/libraries/aron/core/CMakeLists.txt b/source/RobotAPI/libraries/aron/core/CMakeLists.txt index 54acbaea6..c26223773 100644 --- a/source/RobotAPI/libraries/aron/core/CMakeLists.txt +++ b/source/RobotAPI/libraries/aron/core/CMakeLists.txt @@ -10,7 +10,6 @@ set(LIBS ArmarXCoreInterfaces ArmarXCore RobotAPIInterfaces - cppgen SimoxUtility ) @@ -19,6 +18,8 @@ set(LIB_FILES Exception.cpp Path.cpp + aron_conversions.cpp + data/variant/Variant.cpp data/variant/detail/SpecializedVariant.cpp data/variant/detail/ContainerVariant.cpp @@ -60,7 +61,6 @@ set(LIB_FILES type/variant/primitive/Double.cpp type/variant/primitive/String.cpp type/variant/primitive/Bool.cpp - type/variant/dto/DateTime.cpp type/variant/any/AnyObject.cpp type/variant/Factory.cpp @@ -96,41 +96,6 @@ set(LIB_FILES type/converter/Converter.cpp type/converter/variant/VariantConverter.cpp type/converter/nlohmannJSON/NlohmannJSONConverter.cpp - - typereader/xml/Data.cpp - typereader/xml/Factory.cpp - typereader/xml/Reader.cpp - - codegenerator/codewriter/cpp/Writer.cpp - codegenerator/codewriter/cpp/generator/Generator.cpp - codegenerator/codewriter/cpp/generator/detail/SpecializedGenerator.cpp - codegenerator/codewriter/cpp/generator/detail/ContainerGenerator.cpp - codegenerator/codewriter/cpp/generator/detail/NDArrayGenerator.cpp - codegenerator/codewriter/cpp/generator/detail/PrimitiveGenerator.cpp - codegenerator/codewriter/cpp/generator/detail/AnyGenerator.cpp - codegenerator/codewriter/cpp/generator/detail/DtoGenerator.cpp - codegenerator/codewriter/cpp/generator/toplevel/ObjectClass.cpp - codegenerator/codewriter/cpp/generator/toplevel/IntEnumClass.cpp - codegenerator/codewriter/cpp/generator/container/Dict.cpp - codegenerator/codewriter/cpp/generator/container/List.cpp - codegenerator/codewriter/cpp/generator/container/Object.cpp - codegenerator/codewriter/cpp/generator/container/Tuple.cpp - codegenerator/codewriter/cpp/generator/container/Pair.cpp - codegenerator/codewriter/cpp/generator/ndarray/NDArray.cpp - codegenerator/codewriter/cpp/generator/ndarray/Matrix.cpp - codegenerator/codewriter/cpp/generator/ndarray/Quaternion.cpp - codegenerator/codewriter/cpp/generator/ndarray/Image.cpp - codegenerator/codewriter/cpp/generator/ndarray/PointCloud.cpp - codegenerator/codewriter/cpp/generator/enum/IntEnum.cpp - codegenerator/codewriter/cpp/generator/primitive/Int.cpp - codegenerator/codewriter/cpp/generator/primitive/Long.cpp - codegenerator/codewriter/cpp/generator/primitive/Float.cpp - codegenerator/codewriter/cpp/generator/primitive/Double.cpp - codegenerator/codewriter/cpp/generator/primitive/String.cpp - codegenerator/codewriter/cpp/generator/primitive/Bool.cpp - codegenerator/codewriter/cpp/generator/dto/DateTime.cpp - codegenerator/codewriter/cpp/generator/any/AnyObject.cpp - codegenerator/codewriter/cpp/generator/Factory.cpp ) set(LIB_HEADERS @@ -138,6 +103,8 @@ set(LIB_HEADERS Exception.h Path.h + aron_conversions.h + data/variant/Variant.h data/variant/detail/SpecializedVariant.h data/variant/detail/ContainerVariant.h @@ -189,8 +156,6 @@ set(LIB_HEADERS type/variant/primitive/String.h type/variant/primitive/Bool.h type/variant/primitive/All.h - type/variant/dto/DateTime.h - type/variant/dto/All.h type/variant/any/AnyObject.h type/variant/any/All.h type/variant/All.h @@ -233,61 +198,6 @@ set(LIB_HEADERS type/converter/Converter.h type/converter/variant/VariantConverter.h type/converter/nlohmannJSON/NlohmannJSONConverter.h - - typereader/helper/GenerateInfo.h - typereader/helper/GenerateTypeInfo.h - typereader/helper/GenerateIntEnumInfo.h - - typereader/Reader.h - typereader/xml/Data.h - typereader/xml/Factory.h - typereader/xml/Reader.h - - codegenerator/helper/WriterInfo.h - codegenerator/helper/ReaderInfo.h - - codegenerator/codewriter/CodeWriter.h - codegenerator/codewriter/Factory.h - - codegenerator/codewriter/cpp/AronGeneratedClass.h - codegenerator/codewriter/cpp/Writer.h - codegenerator/codewriter/cpp/generator/Generator.h - codegenerator/codewriter/cpp/generator/detail/SpecializedGenerator.h - codegenerator/codewriter/cpp/generator/detail/ContainerGenerator.h - codegenerator/codewriter/cpp/generator/detail/NDArrayGenerator.h - codegenerator/codewriter/cpp/generator/detail/PrimitiveGenerator.h - codegenerator/codewriter/cpp/generator/detail/AnyGenerator.h - codegenerator/codewriter/cpp/generator/detail/DtoGenerator.h - codegenerator/codewriter/cpp/generator/toplevel/ObjectClass.h - codegenerator/codewriter/cpp/generator/toplevel/IntEnumClass.h - codegenerator/codewriter/cpp/generator/toplevel/All.h - codegenerator/codewriter/cpp/generator/container/Dict.h - codegenerator/codewriter/cpp/generator/container/List.h - codegenerator/codewriter/cpp/generator/container/Object.h - codegenerator/codewriter/cpp/generator/container/Tuple.h - codegenerator/codewriter/cpp/generator/container/Pair.h - codegenerator/codewriter/cpp/generator/container/All.h - codegenerator/codewriter/cpp/generator/ndarray/NDArray.h - codegenerator/codewriter/cpp/generator/ndarray/Matrix.h - codegenerator/codewriter/cpp/generator/ndarray/Quaternion.h - codegenerator/codewriter/cpp/generator/ndarray/Image.h - codegenerator/codewriter/cpp/generator/ndarray/PointCloud.h - codegenerator/codewriter/cpp/generator/ndarray/All.h - codegenerator/codewriter/cpp/generator/enum/IntEnum.h - codegenerator/codewriter/cpp/generator/enum/All.h - codegenerator/codewriter/cpp/generator/primitive/Int.h - codegenerator/codewriter/cpp/generator/primitive/Long.h - codegenerator/codewriter/cpp/generator/primitive/Float.h - codegenerator/codewriter/cpp/generator/primitive/Double.h - codegenerator/codewriter/cpp/generator/primitive/String.h - codegenerator/codewriter/cpp/generator/primitive/Bool.h - codegenerator/codewriter/cpp/generator/primitive/All.h - codegenerator/codewriter/cpp/generator/dto/DateTime.h - codegenerator/codewriter/cpp/generator/dto/All.h - codegenerator/codewriter/cpp/generator/any/AnyObject.h - codegenerator/codewriter/cpp/generator/any/All.h - codegenerator/codewriter/cpp/generator/All.h - codegenerator/codewriter/cpp/generator/Factory.h ) diff --git a/source/RobotAPI/libraries/aron/core/Descriptor.h b/source/RobotAPI/libraries/aron/core/Descriptor.h index f04379560..5b386f583 100644 --- a/source/RobotAPI/libraries/aron/core/Descriptor.h +++ b/source/RobotAPI/libraries/aron/core/Descriptor.h @@ -36,46 +36,6 @@ // ArmarX #include <RobotAPI/interface/aron.h> - -/** - * This file contains basic enums to distinguish aron::data and aron::types and utility functions to generate maps converting the neum to strings or vice versa. - * Further, this file contains a conversion map from ice_ids to descriptors. - * - * Every data- or type-object has a descriptor, containing the correct enum for this object. All aron-variants must be either: - * DATA: - * - Dict - * - List - * - NDArray - * - Int - * - Long - * - Float - * - Double - * - String - * - Bool - * - * TYPE: - * - Object - * - Dict - * - List - * - Pair - * - Tuple - * - NDArray - * - Matrix - * - Quaternion - * - Image - * - Pointcloud - * - Int Enum - * - Int - * - Long - * - Float - * - Double - * - String - * - Bool - * - DateTime - * - * A variant should never have eUnknown as its internal type (The enums are const and only set on construction). - * If you want to execute a specific function for a specific variant, please refer to the visitor implementation. - */ namespace armarx::aron::conversion::util { template <class T1, class T2> @@ -106,59 +66,57 @@ namespace armarx::aron::type { const std::vector<type::Maybe> AllMaybeTypes = { - type::Maybe::eNone, - type::Maybe::eOptional, - type::Maybe::eRawPointer, - type::Maybe::eSharedPointer, - type::Maybe::eUniquePointer + type::Maybe::NONE, + type::Maybe::OPTIONAL, + type::Maybe::RAW_PTR, + type::Maybe::SHARED_PTR, + type::Maybe::UNIQUE_PTR }; enum class Descriptor { - eList, - eObject, - eTuple, - ePair, - eDict, - eNDArray, - eMatrix, - eQuaternion, - ePointCloud, - eImage, - eIntEnum, - eInt, - eLong, - eFloat, - eDouble, - eString, - eBool, - eDateTime, - eAnyObject, - eUnknown = -1 + LIST, + OBJECT, + TUPLE, + PAIR, + DICT, + NDARRAY, + MATRIX, + QUATERNION, + POINTCLOUD, + IMAGE, + INT_ENUM, + INT, + LONG, + FLOAT, + DOUBLE, + BOOL, + STRING, + ANY_OBJECT, + UNKNOWN = -1 }; const std::vector<type::Descriptor> AllDescriptors = { - Descriptor::eList, - Descriptor::eObject, - Descriptor::eTuple, - Descriptor::ePair, - Descriptor::eDict, - Descriptor::eNDArray, - Descriptor::eMatrix, - Descriptor::eQuaternion, - Descriptor::ePointCloud, - Descriptor::eImage, - Descriptor::eIntEnum, - Descriptor::eInt, - Descriptor::eLong, - Descriptor::eFloat, - Descriptor::eDouble, - Descriptor::eString, - Descriptor::eBool, - Descriptor::eDateTime, - Descriptor::eAnyObject, - Descriptor::eUnknown + Descriptor::LIST, + Descriptor::OBJECT, + Descriptor::TUPLE, + Descriptor::PAIR, + Descriptor::DICT, + Descriptor::NDARRAY, + Descriptor::MATRIX, + Descriptor::QUATERNION, + Descriptor::POINTCLOUD, + Descriptor::IMAGE, + Descriptor::INT_ENUM, + Descriptor::INT, + Descriptor::LONG, + Descriptor::FLOAT, + Descriptor::DOUBLE, + Descriptor::BOOL, + Descriptor::STRING, + Descriptor::ANY_OBJECT, + Descriptor::UNKNOWN }; namespace defaultconversion::string @@ -166,37 +124,36 @@ namespace armarx::aron::type // Maybe const std::map<type::Maybe, std::string> Maybe2String = { - {Maybe::eNone, "armarx::aron::type::Maybe::eNone"}, - {Maybe::eRawPointer, "armarx::aron::type::Maybe::eRawPointer"}, - {Maybe::eSharedPointer, "armarx::aron::type::Maybe::eSharedPointer"}, - {Maybe::eUniquePointer, "armarx::aron::type::Maybe::eUniquePointer"}, - {Maybe::eOptional, "armarx::aron::type::Maybe::eOptional"} + {Maybe::NONE, "armarx::aron::type::Maybe::NONE"}, + {Maybe::RAW_PTR, "armarx::aron::type::Maybe::RAW_PTR"}, + {Maybe::SHARED_PTR, "armarx::aron::type::Maybe::SHARED_PTR"}, + {Maybe::UNIQUE_PTR, "armarx::aron::type::Maybe::UNIQUE_PTR"}, + {Maybe::OPTIONAL, "armarx::aron::type::Maybe::OPTIONAL"} }; // Descriptor const std::map<type::Descriptor, std::string> Descriptor2String = { - {Descriptor::eList, "armarx::aron::type::Descriptor::eList"}, - {Descriptor::eObject, "armarx::aron::type::Descriptor::eObject"}, - {Descriptor::eDict, "armarx::aron::type::Descriptor::eDict"}, - {Descriptor::ePair, "armarx::aron::type::Descriptor::ePair"}, - {Descriptor::eTuple, "armarx::aron::type::Descriptor::eTuple"}, - {Descriptor::eNDArray, "armarx::aron::type::Descriptor::eNDArray"}, - {Descriptor::eMatrix, "armarx::aron::type::Descriptor::eMatrix"}, - {Descriptor::eQuaternion, "armarx::aron::type::Descriptor::eQuaternion"}, - {Descriptor::eImage, "armarx::aron::type::Descriptor::eImage"}, - {Descriptor::ePointCloud, "armarx::aron::type::Descriptor::ePointCloud"}, - {Descriptor::eNDArray, "armarx::aron::type::Descriptor::eNDArray"}, - {Descriptor::eIntEnum, "armarx::aron::type::Descriptor::eIntEnum"}, - {Descriptor::eInt, "armarx::aron::type::Descriptor::eInt"}, - {Descriptor::eLong, "armarx::aron::type::Descriptor::eLong"}, - {Descriptor::eFloat, "armarx::aron::type::Descriptor::eFloat"}, - {Descriptor::eDouble, "armarx::aron::type::Descriptor::eDouble"}, - {Descriptor::eString, "armarx::aron::type::Descriptor::eString"}, - {Descriptor::eBool, "armarx::aron::type::Descriptor::eBool"}, - {Descriptor::eDateTime, "armarx::aron::type::Descriptor::eDateTime"}, - {Descriptor::eAnyObject, "armarx::aron::type::Descriptor::eAnyObject"}, - {Descriptor::eUnknown, "armarx::aron::type::Descriptor::eUnknown"} + {Descriptor::LIST, "armarx::aron::type::Descriptor::LIST"}, + {Descriptor::OBJECT, "armarx::aron::type::Descriptor::OBJECT"}, + {Descriptor::DICT, "armarx::aron::type::Descriptor::DICT"}, + {Descriptor::PAIR, "armarx::aron::type::Descriptor::PAIR"}, + {Descriptor::TUPLE, "armarx::aron::type::Descriptor::TUPLE"}, + {Descriptor::NDARRAY, "armarx::aron::type::Descriptor::NDARRAY"}, + {Descriptor::MATRIX, "armarx::aron::type::Descriptor::MATRIX"}, + {Descriptor::QUATERNION, "armarx::aron::type::Descriptor::QUATERNION"}, + {Descriptor::IMAGE, "armarx::aron::type::Descriptor::IMAGE"}, + {Descriptor::POINTCLOUD, "armarx::aron::type::Descriptor::POINTCLOUD"}, + {Descriptor::NDARRAY, "armarx::aron::type::Descriptor::NDARRAY"}, + {Descriptor::INT_ENUM, "armarx::aron::type::Descriptor::INT_ENUM"}, + {Descriptor::INT, "armarx::aron::type::Descriptor::INT"}, + {Descriptor::LONG, "armarx::aron::type::Descriptor::LONG"}, + {Descriptor::FLOAT, "armarx::aron::type::Descriptor::FLOAT"}, + {Descriptor::DOUBLE, "armarx::aron::type::Descriptor::DOUBLE"}, + {Descriptor::BOOL, "armarx::aron::type::Descriptor::BOOL"}, + {Descriptor::STRING, "armarx::aron::type::Descriptor::STRING"}, + {Descriptor::ANY_OBJECT, "armarx::aron::type::Descriptor::ANY_OBJECT"}, + {Descriptor::UNKNOWN, "armarx::aron::type::Descriptor::UNKNOWN"} }; } @@ -204,25 +161,24 @@ namespace armarx::aron::type { // hash type const std::map<size_t, Descriptor> TypeId2Descriptor = { - {typeid(aron::type::dto::List).hash_code(), Descriptor::eList}, - {typeid(aron::type::dto::AronObject).hash_code(), Descriptor::eObject}, - {typeid(aron::type::dto::Tuple).hash_code(), Descriptor::eTuple}, - {typeid(aron::type::dto::Pair).hash_code(), Descriptor::ePair}, - {typeid(aron::type::dto::Dict).hash_code(), Descriptor::eDict}, - {typeid(aron::type::dto::NDArray).hash_code(), Descriptor::eNDArray}, - {typeid(aron::type::dto::Matrix).hash_code(), Descriptor::eMatrix}, - {typeid(aron::type::dto::Quaternion).hash_code(), Descriptor::eQuaternion}, - {typeid(aron::type::dto::PointCloud).hash_code(), Descriptor::ePointCloud}, - {typeid(aron::type::dto::Image).hash_code(), Descriptor::eImage}, - {typeid(aron::type::dto::IntEnum).hash_code(), Descriptor::eIntEnum}, - {typeid(aron::type::dto::AronInt).hash_code(), Descriptor::eInt}, - {typeid(aron::type::dto::AronFloat).hash_code(), Descriptor::eFloat}, - {typeid(aron::type::dto::AronLong).hash_code(), Descriptor::eLong}, - {typeid(aron::type::dto::AronDouble).hash_code(), Descriptor::eDouble}, - {typeid(aron::type::dto::AronString).hash_code(), Descriptor::eString}, - {typeid(aron::type::dto::AronBool).hash_code(), Descriptor::eBool}, - {typeid(aron::type::dto::AronDateTime).hash_code(), Descriptor::eDateTime}, - {typeid(aron::type::dto::AnyObject).hash_code(), Descriptor::eAnyObject} + {typeid(aron::type::dto::List).hash_code(), Descriptor::LIST}, + {typeid(aron::type::dto::AronObject).hash_code(), Descriptor::OBJECT}, + {typeid(aron::type::dto::Tuple).hash_code(), Descriptor::TUPLE}, + {typeid(aron::type::dto::Pair).hash_code(), Descriptor::PAIR}, + {typeid(aron::type::dto::Dict).hash_code(), Descriptor::DICT}, + {typeid(aron::type::dto::NDArray).hash_code(), Descriptor::NDARRAY}, + {typeid(aron::type::dto::Matrix).hash_code(), Descriptor::MATRIX}, + {typeid(aron::type::dto::Quaternion).hash_code(), Descriptor::QUATERNION}, + {typeid(aron::type::dto::PointCloud).hash_code(), Descriptor::POINTCLOUD}, + {typeid(aron::type::dto::Image).hash_code(), Descriptor::IMAGE}, + {typeid(aron::type::dto::IntEnum).hash_code(), Descriptor::INT_ENUM}, + {typeid(aron::type::dto::AronInt).hash_code(), Descriptor::INT}, + {typeid(aron::type::dto::AronLong).hash_code(), Descriptor::LONG}, + {typeid(aron::type::dto::AronFloat).hash_code(), Descriptor::FLOAT}, + {typeid(aron::type::dto::AronDouble).hash_code(), Descriptor::DOUBLE}, + {typeid(aron::type::dto::AronString).hash_code(), Descriptor::STRING}, + {typeid(aron::type::dto::AronBool).hash_code(), Descriptor::BOOL}, + {typeid(aron::type::dto::AnyObject).hash_code(), Descriptor::ANY_OBJECT} }; } @@ -236,30 +192,30 @@ namespace armarx::aron::data { enum class Descriptor { - eList, - eDict, - eNDArray, - eInt, - eLong, - eFloat, - eDouble, - eString, - eBool, - eUnknown = -1 + LIST, + DICT, + NDARRAY, + INT, + LONG, + FLOAT, + DOUBLE, + STRING, + BOOL, + UNKNOWN = -1 }; const std::vector<data::Descriptor> AllDescriptors = { - Descriptor::eList, - Descriptor::eDict, - Descriptor::eNDArray, - Descriptor::eInt, - Descriptor::eLong, - Descriptor::eFloat, - Descriptor::eDouble, - Descriptor::eString, - Descriptor::eBool, - Descriptor::eUnknown + Descriptor::LIST, + Descriptor::DICT, + Descriptor::NDARRAY, + Descriptor::INT, + Descriptor::LONG, + Descriptor::FLOAT, + Descriptor::DOUBLE, + Descriptor::STRING, + Descriptor::BOOL, + Descriptor::UNKNOWN }; namespace defaultconversion::string @@ -267,16 +223,16 @@ namespace armarx::aron::data // Descriptor const std::map<data::Descriptor, std::string> Descriptor2String = { - {Descriptor::eList, "armarx::aron::data::Descriptor::eList"}, - {Descriptor::eDict, "armarx::aron::data::Descriptor::eDict"}, - {Descriptor::eNDArray, "armarx::aron::data::Descriptor::eNDArray"}, - {Descriptor::eInt, "armarx::aron::data::Descriptor::eInt"}, - {Descriptor::eLong, "armarx::aron::data::Descriptor::eLong"}, - {Descriptor::eFloat, "armarx::aron::data::Descriptor::eFloat"}, - {Descriptor::eDouble, "armarx::aron::data::Descriptor::eDouble"}, - {Descriptor::eString, "armarx::aron::data::Descriptor::eString"}, - {Descriptor::eBool, "armarx::aron::data::Descriptor::eBool"}, - {Descriptor::eUnknown, "armarx::aron::data::Descriptor::eUnknown"} + {Descriptor::LIST, "armarx::aron::data::Descriptor::LIST"}, + {Descriptor::DICT, "armarx::aron::data::Descriptor::DICT"}, + {Descriptor::NDARRAY, "armarx::aron::data::Descriptor::NDARRAY"}, + {Descriptor::INT, "armarx::aron::data::Descriptor::INT"}, + {Descriptor::LONG, "armarx::aron::data::Descriptor::LONG"}, + {Descriptor::FLOAT, "armarx::aron::data::Descriptor::FLOAT"}, + {Descriptor::DOUBLE, "armarx::aron::data::Descriptor::DOUBLE"}, + {Descriptor::STRING, "armarx::aron::data::Descriptor::STRING"}, + {Descriptor::BOOL, "armarx::aron::data::Descriptor::BOOL"}, + {Descriptor::UNKNOWN, "armarx::aron::data::Descriptor::UNKNOWN"} }; } @@ -284,15 +240,15 @@ namespace armarx::aron::data { // TypeID const std::map<size_t, Descriptor> TypeId2Descriptor = { - {typeid(aron::data::dto::List).hash_code(), Descriptor::eList}, - {typeid(aron::data::dto::Dict).hash_code(), Descriptor::eDict}, - {typeid(aron::data::dto::NDArray).hash_code(), Descriptor::eNDArray}, - {typeid(aron::data::dto::AronInt).hash_code(), Descriptor::eInt}, - {typeid(aron::data::dto::AronFloat).hash_code(), Descriptor::eFloat}, - {typeid(aron::data::dto::AronLong).hash_code(), Descriptor::eLong}, - {typeid(aron::data::dto::AronDouble).hash_code(), Descriptor::eDouble}, - {typeid(aron::data::dto::AronString).hash_code(), Descriptor::eString}, - {typeid(aron::data::dto::AronBool).hash_code(), Descriptor::eBool}, + {typeid(aron::data::dto::List).hash_code(), Descriptor::LIST}, + {typeid(aron::data::dto::Dict).hash_code(), Descriptor::DICT}, + {typeid(aron::data::dto::NDArray).hash_code(), Descriptor::NDARRAY}, + {typeid(aron::data::dto::AronInt).hash_code(), Descriptor::INT}, + {typeid(aron::data::dto::AronFloat).hash_code(), Descriptor::FLOAT}, + {typeid(aron::data::dto::AronLong).hash_code(), Descriptor::LONG}, + {typeid(aron::data::dto::AronDouble).hash_code(), Descriptor::DOUBLE}, + {typeid(aron::data::dto::AronString).hash_code(), Descriptor::STRING}, + {typeid(aron::data::dto::AronBool).hash_code(), Descriptor::BOOL}, }; } @@ -303,48 +259,46 @@ namespace armarx::aron::data namespace defaultconversion { + // Useful if data is present but no type information. Try to infer type from data. const std::map<Descriptor, aron::type::Descriptor> Data2TypeDescriptor = { - {Descriptor::eList, aron::type::Descriptor::eList}, - {Descriptor::eDict, aron::type::Descriptor::eDict}, - {Descriptor::eNDArray, aron::type::Descriptor::eNDArray}, - {Descriptor::eInt, aron::type::Descriptor::eInt}, - {Descriptor::eFloat, aron::type::Descriptor::eFloat}, - {Descriptor::eLong, aron::type::Descriptor::eLong}, - {Descriptor::eDouble, aron::type::Descriptor::eDouble}, - {Descriptor::eString, aron::type::Descriptor::eString}, - {Descriptor::eBool, aron::type::Descriptor::eBool}, - {Descriptor::eUnknown, aron::type::Descriptor::eUnknown} + {Descriptor::LIST, aron::type::Descriptor::LIST}, + {Descriptor::DICT, aron::type::Descriptor::DICT}, + {Descriptor::NDARRAY, aron::type::Descriptor::NDARRAY}, + {Descriptor::INT, aron::type::Descriptor::INT}, + {Descriptor::FLOAT, aron::type::Descriptor::FLOAT}, + {Descriptor::LONG, aron::type::Descriptor::LONG}, + {Descriptor::DOUBLE, aron::type::Descriptor::DOUBLE}, + {Descriptor::STRING, aron::type::Descriptor::STRING}, + {Descriptor::BOOL, aron::type::Descriptor::BOOL}, + {Descriptor::UNKNOWN, aron::type::Descriptor::UNKNOWN} }; const std::map<aron::type::Descriptor, Descriptor> Type2DataDescriptor = { // containers - {aron::type::Descriptor::eList, Descriptor::eList}, - {aron::type::Descriptor::eObject, Descriptor::eDict}, - {aron::type::Descriptor::eTuple, Descriptor::eList}, - {aron::type::Descriptor::ePair, Descriptor::eList}, - {aron::type::Descriptor::eDict, Descriptor::eDict}, - - // everything which gets an object - {aron::type::Descriptor::eDateTime, Descriptor::eDict}, + {aron::type::Descriptor::LIST, Descriptor::LIST}, + {aron::type::Descriptor::OBJECT, Descriptor::DICT}, + {aron::type::Descriptor::TUPLE, Descriptor::LIST}, + {aron::type::Descriptor::PAIR, Descriptor::LIST}, + {aron::type::Descriptor::DICT, Descriptor::DICT}, // everything which gets an ndarray - {aron::type::Descriptor::eNDArray, Descriptor::eNDArray}, - {aron::type::Descriptor::eMatrix, Descriptor::eNDArray}, - {aron::type::Descriptor::eQuaternion, Descriptor::eNDArray}, - {aron::type::Descriptor::ePointCloud, Descriptor::eNDArray}, - {aron::type::Descriptor::eImage, Descriptor::eNDArray}, + {aron::type::Descriptor::NDARRAY, Descriptor::NDARRAY}, + {aron::type::Descriptor::MATRIX, Descriptor::NDARRAY}, + {aron::type::Descriptor::QUATERNION, Descriptor::NDARRAY}, + {aron::type::Descriptor::POINTCLOUD, Descriptor::NDARRAY}, + {aron::type::Descriptor::IMAGE, Descriptor::NDARRAY}, // enums - {aron::type::Descriptor::eIntEnum, Descriptor::eInt}, + {aron::type::Descriptor::INT_ENUM, Descriptor::INT}, // primitives - {aron::type::Descriptor::eInt, Descriptor::eInt}, - {aron::type::Descriptor::eLong, Descriptor::eLong}, - {aron::type::Descriptor::eFloat, Descriptor::eFloat}, - {aron::type::Descriptor::eDouble, Descriptor::eDouble}, - {aron::type::Descriptor::eString, Descriptor::eString}, - {aron::type::Descriptor::eBool, Descriptor::eBool}, - {aron::type::Descriptor::eUnknown, Descriptor::eUnknown}, + {aron::type::Descriptor::INT, Descriptor::INT}, + {aron::type::Descriptor::LONG, Descriptor::LONG}, + {aron::type::Descriptor::FLOAT, Descriptor::FLOAT}, + {aron::type::Descriptor::DOUBLE, Descriptor::DOUBLE}, + {aron::type::Descriptor::STRING, Descriptor::STRING}, + {aron::type::Descriptor::BOOL, Descriptor::BOOL}, + {aron::type::Descriptor::UNKNOWN, Descriptor::UNKNOWN}, }; } } diff --git a/source/RobotAPI/libraries/aron/core/Path.cpp b/source/RobotAPI/libraries/aron/core/Path.cpp index bcc51b5d3..8218b431b 100644 --- a/source/RobotAPI/libraries/aron/core/Path.cpp +++ b/source/RobotAPI/libraries/aron/core/Path.cpp @@ -33,7 +33,6 @@ namespace armarx::aron rootIdentifier("_ARON"), delimeter("->") { - } Path::Path(const std::vector<std::string>& p) : diff --git a/source/RobotAPI/libraries/aron/core/aron_conversions.cpp b/source/RobotAPI/libraries/aron/core/aron_conversions.cpp new file mode 100644 index 000000000..add7a1803 --- /dev/null +++ b/source/RobotAPI/libraries/aron/core/aron_conversions.cpp @@ -0,0 +1,6 @@ +#include "aron_conversions.h" + +namespace armarx::aron +{ + +} diff --git a/source/RobotAPI/libraries/aron/core/aron_conversions.h b/source/RobotAPI/libraries/aron/core/aron_conversions.h new file mode 100644 index 000000000..3e454465e --- /dev/null +++ b/source/RobotAPI/libraries/aron/core/aron_conversions.h @@ -0,0 +1,391 @@ +#pragma once + +#include <map> +#include <memory> +#include <optional> +#include <vector> + +namespace armarx::aron +{ + + /** + * Framework for converting ARON DTOs (Data Transfer Objects) to C++ BOs + * (Business Objects) and back. + * + * To allow conversion between custom ARON and C++ types, declare two + * functions in the namespace of the BO: + * + * @code + * // aron_conversions.h + * + * namespace bo_namespace + * { + * void toAron(arondto::MyObject& dto, const MyObject& bo); + * void fromAron(const arondto::MyObject& dto, MyObject& bo); + * } + * @endcode + * + * Note that the DTO always comes first, and the target object is + * non-const. + * + * In the implementation, + * + * + * @code + * // aron_conversions.cpp + * + * #include "aron_conversions.h" + * #include <Path/to/MyValue/aron_conversions.h> + * + * void bo_namespace::toAron(arondto::MyObject& dto, const MyObject& bo) + * { + * dto.name = bo.name; + * toAron(dto.myValue, bo.myValue); + * } + * + * void bo_namespace::fromAron(const arondto::MyObject& dto, MyObject& bo) + * { + * bo.name = dto.name; + * fromAron(dto.myValue, bo.myValue); + * } + * @endcode + */ + + // Same type + template <class T> + void toAron(T& dto, const T& bo) + { + dto = bo; + } + template <class T> + void fromAron(const T& dto, T& bo) + { + bo = dto; + } + + + // Generic return version + + template <class DtoT, class BoT> + DtoT toAron(const BoT& bo) + { + DtoT dto; + toAron(dto, bo); + return dto; + } + template <class BoT, class DtoT> + BoT fromAron(const DtoT& dto) + { + BoT bo; + fromAron(dto, bo); + return bo; + } + + + + + + + + // std::unique_ptr + + template <class DtoT, class BoT> + void toAron(DtoT& dto, const std::unique_ptr<BoT>& bo) + { + if (bo) + { + toAron(dto, *bo); + } + } + template <class DtoT, class BoT> + void fromAron(const DtoT& dto, std::unique_ptr<BoT>& bo) + { + bo = std::make_unique<BoT>(); + fromAron(dto, *bo); + } + + + // std::optional + + template <class DtoT, class BoT> + void toAron(std::optional<DtoT>& dto, const std::optional<BoT>& bo) + { + if (bo.has_value()) + { + dto = DtoT{}; + toAron(*dto, *bo); + } + else + { + dto = std::nullopt; + } + } + template <class DtoT, class BoT> + void fromAron(const std::optional<DtoT>& dto, std::optional<BoT>& bo) + { + if (dto.has_value()) + { + bo = BoT{}; + fromAron(*dto, *bo); + } + else + { + bo = std::nullopt; + } + } + + // Flag-controlled optional + template <class DtoT, class BoT> + void toAron(DtoT& dto, bool& dtoValid, const BoT& bo, bool boValid) + { + dtoValid = boValid; + if (boValid) + { + toAron(dto, bo); + } + else + { + dto = {}; + } + } + template <class DtoT, class BoT> + void fromAron(const DtoT& dto, bool dtoValid, BoT& bo, bool& boValid) + { + boValid = dtoValid; + if (dtoValid) + { + fromAron(dto, bo); + } + else + { + bo = {}; + } + } + + template <class DtoT, class BoT> + void toAron(DtoT& dto, bool& dtoValid, const std::optional<BoT>& bo) + { + dtoValid = bo.has_value(); + if (dtoValid) + { + toAron(dto, *bo); + } + else + { + dto = {}; + } + } + template <class DtoT, class BoT> + void fromAron(const DtoT& dto, bool dtoValid, std::optional<BoT>& bo) + { + if (dtoValid) + { + bo = BoT{}; + fromAron(dto, *bo); + } + else + { + bo = std::nullopt; + } + } + + // Helper concept to avoid ambiguities + template<typename DtoT, typename BoT> + concept DtoAndBoAreSame = std::is_same<DtoT, BoT>::value; + + + // std::vector + + template <class DtoT, class BoT> + requires (!DtoAndBoAreSame<DtoT, BoT>) + void toAron(std::vector<DtoT>& dtos, const std::vector<BoT>& bos) + { + dtos.clear(); + dtos.reserve(bos.size()); + for (const auto& bo : bos) + { + toAron(dtos.emplace_back(), bo); + } + } + template <class DtoT, class BoT> + requires (!DtoAndBoAreSame<DtoT, BoT>) + void fromAron(const std::vector<DtoT>& dtos, std::vector<BoT>& bos) + { + bos.clear(); + bos.reserve(dtos.size()); + for (const auto& dto : dtos) + { + fromAron(dto, bos.emplace_back()); + } + } + + template <class DtoT, class BoT> + requires (!DtoAndBoAreSame<DtoT, BoT>) + std::vector<DtoT> toAron(const std::vector<BoT>& bos) + { + std::vector<DtoT> dtos; + toAron(dtos, bos); + return dtos; + } + + + // std::map + + template <class DtoKeyT, class DtoValueT, class BoKeyT, class BoValueT> + requires (!(DtoAndBoAreSame<DtoKeyT, BoKeyT> and DtoAndBoAreSame<DtoValueT, BoValueT>)) + void toAron(std::map<DtoKeyT, DtoValueT>& dtoMap, + const std::map<BoKeyT, BoValueT>& boMap) + { + dtoMap.clear(); + for (const auto& [boKey, boValue] : boMap) + { + DtoKeyT dtoKey; + toAron(dtoKey, boKey); + auto [it, _] = dtoMap.emplace(std::move(dtoKey), DtoValueT{}); + toAron(it->second, boValue); + } + } + template <class DtoKeyT, class DtoValueT, class BoKeyT, class BoValueT> + requires (!(DtoAndBoAreSame<DtoKeyT, BoKeyT> and DtoAndBoAreSame<DtoValueT, BoValueT>)) + void fromAron(const std::map<DtoKeyT, DtoValueT>& dtoMap, + std::map<BoKeyT, BoValueT>& boMap) + { + boMap.clear(); + for (const auto& [dtoKey, dtoValue] : dtoMap) + { + BoKeyT boKey; + fromAron(dtoKey, boKey); + auto [it, _] = boMap.emplace(boKey, BoValueT{}); + fromAron(dtoValue, it->second); + } + } + + + template <class DtoKeyT, class DtoValueT, class BoKeyT, class BoValueT> + requires (!(DtoAndBoAreSame<DtoKeyT, BoKeyT> and DtoAndBoAreSame<DtoValueT, BoValueT>)) + std::map<DtoKeyT, DtoValueT> toAron(const std::map<BoKeyT, BoValueT>& boMap) + { + std::map<DtoKeyT, DtoValueT> dtoMap; + toAron(dtoMap, boMap); + return dtoMap; + } +} + +namespace armarx +{ + // Same type + template <class T> + void toAron(T& dto, const T& bo) + { + armarx::aron::toAron(dto, bo); + } + template <class T> + void fromAron(const T& dto, T& bo) + { + armarx::aron::fromAron(dto, bo); + } + + + // Generic return version + template <class DtoT, class BoT> + DtoT toAron(const BoT& bo) + { + return armarx::aron::toAron<DtoT, BoT>(bo); + } + template <class BoT, class DtoT> + BoT fromAron(const DtoT& dto) + { + return armarx::aron::fromAron<BoT, DtoT>(dto); + } + + // std::unique_ptr + template <class DtoT, class BoT> + void toAron(DtoT& dto, const std::unique_ptr<BoT>& bo) + { + armarx::aron::toAron(dto, bo); + } + template <class DtoT, class BoT> + void fromAron(const DtoT& dto, std::unique_ptr<BoT>& bo) + { + armarx::aron::fromAron(dto, bo); + } + + // std::optional + template <class DtoT, class BoT> + void toAron(std::optional<DtoT>& dto, const std::optional<BoT>& bo) + { + armarx::aron::toAron(dto, bo); + } + template <class DtoT, class BoT> + void fromAron(const std::optional<DtoT>& dto, std::optional<BoT>& bo) + { + armarx::aron::fromAron(dto, bo); + } + + // Flag-controlled optional + template <class DtoT, class BoT> + void toAron(DtoT& dto, bool& dtoValid, const BoT& bo, bool boValid) + { + armarx::aron::toAron(dto, dtoValid, bo, boValid); + } + template <class DtoT, class BoT> + void fromAron(const DtoT& dto, bool dtoValid, BoT& bo, bool& boValid) + { + armarx::aron::fromAron(dto, dtoValid, bo, boValid); + } + + template <class DtoT, class BoT> + void toAron(DtoT& dto, bool& dtoValid, const std::optional<BoT>& bo) + { + armarx::aron::toAron(dto, dtoValid, bo); + } + template <class DtoT, class BoT> + void fromAron(const DtoT& dto, bool dtoValid, std::optional<BoT>& bo) + { + armarx::aron::fromAron(dto, dtoValid, bo); + } + + // std::vector + template <class DtoT, class BoT> + requires (!aron::DtoAndBoAreSame<DtoT, BoT>) + void toAron(std::vector<DtoT>& dtos, const std::vector<BoT>& bos) + { + armarx::aron::toAron(dtos, bos); + } + template <class DtoT, class BoT> + requires (!aron::DtoAndBoAreSame<DtoT, BoT>) + void fromAron(const std::vector<DtoT>& dtos, std::vector<BoT>& bos) + { + armarx::aron::fromAron(dtos, bos); + } + + template <class DtoT, class BoT> + requires (!aron::DtoAndBoAreSame<DtoT, BoT>) + std::vector<DtoT> toAron(const std::vector<BoT>& bos) + { + return armarx::aron::toAron<DtoT, BoT>(bos); + } + + + // std::map + template <class DtoKeyT, class DtoValueT, class BoKeyT, class BoValueT> + requires (!(aron::DtoAndBoAreSame<DtoKeyT, BoKeyT> and aron::DtoAndBoAreSame<DtoValueT, BoValueT>)) + void toAron(std::map<DtoKeyT, DtoValueT>& dtoMap, const std::map<BoKeyT, BoValueT>& boMap) + { + armarx::aron::toAron(dtoMap, boMap); + } + template <class DtoKeyT, class DtoValueT, class BoKeyT, class BoValueT> + requires (!(aron::DtoAndBoAreSame<DtoKeyT, BoKeyT> and aron::DtoAndBoAreSame<DtoValueT, BoValueT>)) + void fromAron(const std::map<DtoKeyT, DtoValueT>& dtoMap, std::map<BoKeyT, BoValueT>& boMap) + { + armarx::aron::fromAron(dtoMap, boMap); + } + + + template <class DtoKeyT, class DtoValueT, class BoKeyT, class BoValueT> + requires (!(aron::DtoAndBoAreSame<DtoKeyT, BoKeyT> and aron::DtoAndBoAreSame<DtoValueT, BoValueT>)) + std::map<DtoKeyT, DtoValueT> toAron(const std::map<BoKeyT, BoValueT>& boMap) + { + armarx::aron::toAron<DtoKeyT, DtoValueT, BoKeyT, BoValueT>(boMap); + } +} diff --git a/source/RobotAPI/libraries/aron/core/codegenerator/codewriter/cpp/generator/Factory.cpp b/source/RobotAPI/libraries/aron/core/codegenerator/codewriter/cpp/generator/Factory.cpp deleted file mode 100644 index 65a7eb0aa..000000000 --- a/source/RobotAPI/libraries/aron/core/codegenerator/codewriter/cpp/generator/Factory.cpp +++ /dev/null @@ -1,65 +0,0 @@ -/* - * This file is part of ArmarX. - * - * Copyright (C) 2012-2016, High Performance Humanoid Technologies (H2T), - * Karlsruhe Institute of Technology (KIT), all rights reserved. - * - * ArmarX is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License version 2 as - * published by the Free Software Foundation. - * - * ArmarX is distributed in the hope that it will be useful, but - * WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see <http://www.gnu.org/licenses/>. - * - * @author Fabian Peller-Konrad (fabian dot peller-konrad at kit dot edu) - * @copyright http://www.gnu.org/licenses/gpl-2.0.txt - * GNU General Public License - */ - -// STD/STL - -// Header -#include "Factory.h" - -// ArmarX -#include "All.h" -#include "enum/All.h" - -namespace armarx::aron::codegenerator::cpp -{ - // Access method - std::unique_ptr<Generator> GeneratorFactory::create(const type::Variant& n, const Path& path) const - { - auto desc = n.getDescriptor(); - switch(desc) - { - case type::Descriptor::eList: return std::make_unique<generator::List>(dynamic_cast<const type::List&>(n)); - case type::Descriptor::eDict: return std::make_unique<generator::Dict>(dynamic_cast<const type::Dict&>(n)); - case type::Descriptor::eObject: return std::make_unique<generator::Object>(dynamic_cast<const type::Object&>(n)); - case type::Descriptor::eTuple: return std::make_unique<generator::Tuple>(dynamic_cast<const type::Tuple&>(n)); - case type::Descriptor::ePair: return std::make_unique<generator::Pair>(dynamic_cast<const type::Pair&>(n)); - case type::Descriptor::eNDArray: return std::make_unique<generator::NDArray>(dynamic_cast<const type::NDArray&>(n)); - case type::Descriptor::eMatrix: return std::make_unique<generator::Matrix>(dynamic_cast<const type::Matrix&>(n)); - case type::Descriptor::eQuaternion: return std::make_unique<generator::Quaternion>(dynamic_cast<const type::Quaternion&>(n)); - case type::Descriptor::eImage: return std::make_unique<generator::Image>(dynamic_cast<const type::Image&>(n)); - case type::Descriptor::ePointCloud: return std::make_unique<generator::PointCloud>(dynamic_cast<const type::PointCloud&>(n)); - case type::Descriptor::eIntEnum: return std::make_unique<generator::IntEnum>(dynamic_cast<const type::IntEnum&>(n)); - case type::Descriptor::eInt: return std::make_unique<generator::Int>(dynamic_cast<const type::Int&>(n)); - case type::Descriptor::eLong: return std::make_unique<generator::Long>(dynamic_cast<const type::Long&>(n)); - case type::Descriptor::eFloat: return std::make_unique<generator::Float>(dynamic_cast<const type::Float&>(n)); - case type::Descriptor::eDouble: return std::make_unique<generator::Double>(dynamic_cast<const type::Double&>(n)); - case type::Descriptor::eString: return std::make_unique<generator::String>(dynamic_cast<const type::String&>(n)); - case type::Descriptor::eBool: return std::make_unique<generator::Bool>(dynamic_cast<const type::Bool&>(n)); - case type::Descriptor::eDateTime: return std::make_unique<generator::DateTime>(dynamic_cast<const type::DateTime&>(n)); - case type::Descriptor::eAnyObject: return std::make_unique<generator::AnyObject>(dynamic_cast<const type::AnyObject&>(n)); - case type::Descriptor::eUnknown: break; - } - throw error::ValueNotValidException(__PRETTY_FUNCTION__, "Cannot create a generator", std::to_string((int) desc), path); - } - -} diff --git a/source/RobotAPI/libraries/aron/core/codegenerator/codewriter/cpp/generator/container/Object.cpp b/source/RobotAPI/libraries/aron/core/codegenerator/codewriter/cpp/generator/container/Object.cpp deleted file mode 100644 index e4cb33a24..000000000 --- a/source/RobotAPI/libraries/aron/core/codegenerator/codewriter/cpp/generator/container/Object.cpp +++ /dev/null @@ -1,104 +0,0 @@ -/* - * This file is part of ArmarX. - * - * Copyright (C) 2012-2016, High Performance Humanoid Technologies (H2T), - * Karlsruhe Institute of Technology (KIT), all rights reserved. - * - * ArmarX is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License version 2 as - * published by the Free Software Foundation. - * - * ArmarX is distributed in the hope that it will be useful, but - * WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see <http://www.gnu.org/licenses/>. - * - * @author Fabian Peller-Konrad (fabian dot peller-konrad at kit dot edu) - * @copyright http://www.gnu.org/licenses/gpl-2.0.txt - * GNU General Public License - */ - -// Header -#include "Object.h" - -#include <SimoxUtility/meta/type_name.h> -#include <SimoxUtility/algorithm/vector.hpp> - - -namespace armarx::aron::codegenerator::cpp::generator -{ - // constructors - Object::Object(const type::Object& e) : - detail::ContainerGenerator<type::Object, Object>( - e.getObjectNameWithTemplateInstantiations(), - e.getObjectNameWithTemplates(), - simox::meta::get_type_name<data::dto::Dict>(), - simox::meta::get_type_name<type::dto::AronObject>(), e) - { - } - - - std::vector<std::string> Object::getRequiredIncludes() const - { - std::vector<std::string> ret; - for (const auto& [key, child] : type.getMemberTypes()) - { - (void) key; - auto child_s = FromAronType(*child); - ret = simox::alg::appended(ret, child_s->getRequiredIncludes()); - } - return ret; - } - - CppBlockPtr Object::getResetSoftBlock(const std::string& cppAccessor) const - { - CppBlockPtr block_if_data = std::make_shared<CppBlock>(); - block_if_data->addLine(cppAccessor + nextEl() + "resetSoft();"); - return this->resolveMaybeResetSoftBlock(block_if_data, cppAccessor); - } - - CppBlockPtr Object::getWriteTypeBlock(const std::string& typeAccessor, const std::string& cppAccessor, const Path& p, std::string& variantAccessor) const - { - CppBlockPtr b = std::make_shared<CppBlock>(); - std::string escaped_accessor = EscapeAccessor(cppAccessor); - variantAccessor = ARON_VARIANT_RETURN_ACCESSOR + "_" + escaped_accessor; - - std::vector<std::string> templatesQuoted; - for (const auto& t : type.getTemplateInstantiations()) - { - templatesQuoted.push_back("\"" + t + "\""); - } - - b->addLine("auto " + variantAccessor + " = " + getInstantiatedCppTypename() + "::writeType(" + ARON_WRITER_ACCESSOR + ", " + - "{" + simox::alg::join(templatesQuoted, ", ") + "}, " + - conversion::Maybe2CppString.at(type.getMaybe()) + ", " + - "armarx::aron::Path("+ARON_PATH_ACCESSOR+", {"+simox::alg::join(p.getPath(), ", ")+"})); // of " + cppAccessor); - return b; - } - - CppBlockPtr Object::getWriteBlock(const std::string& cppAccessor, const Path& p, std::string& variantAccessor) const - { - CppBlockPtr block_if_data = std::make_shared<CppBlock>(); - std::string escaped_accessor = EscapeAccessor(cppAccessor); - variantAccessor = ARON_VARIANT_RETURN_ACCESSOR + "_" + escaped_accessor; - - block_if_data->addLine(variantAccessor + " = " + cppAccessor + nextEl() + "write(" + ARON_WRITER_ACCESSOR + ", "+ - "armarx::aron::Path("+ARON_PATH_ACCESSOR+", {"+simox::alg::join(p.getPath(), ", ")+"})); // of " + cppAccessor); - return resolveMaybeWriteBlock(block_if_data, cppAccessor); - } - - CppBlockPtr Object::getReadBlock(const std::string& cppAccessor, const std::string& variantAccessor) const - { - CppBlockPtr block_if_data = std::make_shared<CppBlock>(); - if (const auto reset = resolveMaybeGenerator(cppAccessor); !reset.empty()) - { - block_if_data->addLine(reset); - } - block_if_data->addLine(cppAccessor + nextEl() + "read(" + ARON_READER_ACCESSOR + ", " + variantAccessor + "); // of " + cppAccessor); - return resolveMaybeReadBlock(block_if_data, cppAccessor, variantAccessor); - } -} - diff --git a/source/RobotAPI/libraries/aron/core/codegenerator/codewriter/cpp/generator/detail/AnyGenerator.h b/source/RobotAPI/libraries/aron/core/codegenerator/codewriter/cpp/generator/detail/AnyGenerator.h deleted file mode 100644 index 04e3b2b79..000000000 --- a/source/RobotAPI/libraries/aron/core/codegenerator/codewriter/cpp/generator/detail/AnyGenerator.h +++ /dev/null @@ -1,66 +0,0 @@ -/* - * This file is part of ArmarX. - * - * Copyright (C) 2012-2016, High Performance Humanoid Technologies (H2T), - * Karlsruhe Institute of Technology (KIT), all rights reserved. - * - * ArmarX is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License version 2 as - * published by the Free Software Foundation. - * - * ArmarX is distributed in the hope that it will be useful, but - * WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see <http://www.gnu.org/licenses/>. - * - * @author Fabian Peller-Konrad (fabian dot peller-konrad at kit dot edu) - * @copyright http://www.gnu.org/licenses/gpl-2.0.txt - * GNU General Public License - */ - -#pragma once - -#include "SpecializedGenerator.h" - -#include <string> - - -namespace armarx::aron::codegenerator::cpp::generator::detail -{ - template<typename typeT, typename DerivedT> - class AnyGenerator : - public SpecializedGeneratorBase<typeT, DerivedT> - { - public: - using SpecializedGeneratorBase<typeT, DerivedT>::SpecializedGeneratorBase; - virtual ~AnyGenerator() = default; - - - std::vector<std::string> getRequiredIncludes() const override - { - return {"<RobotAPI/libraries/aron/core/data/converter/variant/VariantConverter.h>"}; - } - - CppBlockPtr getWriteBlock(const std::string& cppAccessor, const Path& p, std::string& variantAccessor) const override - { - auto block_if_data = std::make_shared<CppBlock>(); - std::string escaped_accessor = this->EscapeAccessor(cppAccessor); - variantAccessor = Generator::ARON_VARIANT_RETURN_ACCESSOR + "_" + escaped_accessor; - - block_if_data->addLine(variantAccessor + " = armarx::aron::data::readAndWrite<armarx::aron::data::FromVariantConverter<WriterT>>(" + cppAccessor + "); // of " + cppAccessor); - return block_if_data; - } - - CppBlockPtr getReadBlock(const std::string& cppAccessor, const std::string& variantAccessor) const override - { - auto block_if_data = std::make_shared<CppBlock>(); - std::string escaped_accessor = this->EscapeAccessor(cppAccessor); - - block_if_data->addLine(cppAccessor + " = armarx::aron::data::Dict::DynamicCastAndCheck(armarx::aron::data::readAndWrite<aron::data::ToVariantConverter<ReaderT>>(" + variantAccessor + ")); // of " + cppAccessor); - return block_if_data; - } - }; -} diff --git a/source/RobotAPI/libraries/aron/core/codegenerator/codewriter/cpp/generator/detail/DtoGenerator.cpp b/source/RobotAPI/libraries/aron/core/codegenerator/codewriter/cpp/generator/detail/DtoGenerator.cpp deleted file mode 100644 index 5c1cbccd1..000000000 --- a/source/RobotAPI/libraries/aron/core/codegenerator/codewriter/cpp/generator/detail/DtoGenerator.cpp +++ /dev/null @@ -1,25 +0,0 @@ -/* - * This file is part of ArmarX. - * - * Copyright (C) 2012-2016, High Performance Humanoid Technologies (H2T), - * Karlsruhe Institute of Technology (KIT), all rights reserved. - * - * ArmarX is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License version 2 as - * published by the Free Software Foundation. - * - * ArmarX is distributed in the hope that it will be useful, but - * WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see <http://www.gnu.org/licenses/>. - * - * @author Fabian Peller-Konrad (fabian dot peller-konrad at kit dot edu) - * @copyright http://www.gnu.org/licenses/gpl-2.0.txt - * GNU General Public License - */ - -// Header -#include "DtoGenerator.h" diff --git a/source/RobotAPI/libraries/aron/core/codegenerator/codewriter/cpp/generator/dto/All.h b/source/RobotAPI/libraries/aron/core/codegenerator/codewriter/cpp/generator/dto/All.h deleted file mode 100644 index 2641bc405..000000000 --- a/source/RobotAPI/libraries/aron/core/codegenerator/codewriter/cpp/generator/dto/All.h +++ /dev/null @@ -1,8 +0,0 @@ -#pragma once - -#include "DateTime.h" - -namespace { - -} - diff --git a/source/RobotAPI/libraries/aron/core/codegenerator/codewriter/cpp/generator/dto/DateTime.cpp b/source/RobotAPI/libraries/aron/core/codegenerator/codewriter/cpp/generator/dto/DateTime.cpp deleted file mode 100644 index 58586efe4..000000000 --- a/source/RobotAPI/libraries/aron/core/codegenerator/codewriter/cpp/generator/dto/DateTime.cpp +++ /dev/null @@ -1,88 +0,0 @@ -/* - * This file is part of ArmarX. - * - * Copyright (C) 2012-2016, High Performance Humanoid Technologies (H2T), - * Karlsruhe Institute of Technology (KIT), all rights reserved. - * - * ArmarX is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License version 2 as - * published by the Free Software Foundation. - * - * ArmarX is distributed in the hope that it will be useful, but - * WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see <http://www.gnu.org/licenses/>. - * - * @author Fabian Peller-Konrad (fabian dot peller-konrad at kit dot edu) - * @copyright http://www.gnu.org/licenses/gpl-2.0.txt - * GNU General Public License - */ - -#include "DateTime.h" - -#include <SimoxUtility/meta/type_name.h> - - -namespace armarx::aron::codegenerator::cpp::generator -{ - /* constructors */ - DateTime::DateTime(const type::DateTime& e) : - detail::DtoGenerator<type::DateTime, DateTime>( - "armarx::core::time::DateTime", - "armarx::core::time::DateTime", - simox::meta::get_type_name<data::dto::Dict>(), - simox::meta::get_type_name<type::dto::AronDateTime>(), - e) - { - } - - /* virtual implementations */ - std::vector<std::string> DateTime::getRequiredIncludes() const - { - return {"<RobotAPI/libraries/aron/common/aron_conversions/time.h>", "<ArmarXCore/core/time.h>", "<ArmarXCore/interface/core/time.h>"}; - } - - CppBlockPtr DateTime::getWriteTypeBlock(const std::string& typeAccessor, const std::string& accessor, const Path& p, std::string& variantAccessor) const - { - CppBlockPtr b = std::make_shared<CppBlock>(); - std::string escaped_accessor = EscapeAccessor(accessor); - variantAccessor = ARON_VARIANT_RETURN_ACCESSOR + "_" + escaped_accessor; - - b->addLine("auto " + variantAccessor + " = " + ARON_WRITER_ACCESSOR + ".writeDateTime(" + conversion::Maybe2CppString.at(type.getMaybe()) + ", " + - "armarx::aron::Path("+ARON_PATH_ACCESSOR+", {"+simox::alg::join(p.getPath(), ", ")+"})); // of " + typeAccessor); - return b; - } - - CppBlockPtr DateTime::getWriteBlock(const std::string& cppAccessor, const Path& p, std::string& variantAccessor) const - { - CppBlockPtr block_if_data = std::make_shared<CppBlock>(); - std::string resolved_accessor = resolveMaybeAccessor(cppAccessor); - std::string escaped_accessor = EscapeAccessor(cppAccessor); - std::string tmp = ARON_VARIABLE_PREFIX + "_" + escaped_accessor + "_timeTmp"; - variantAccessor = ARON_VARIANT_RETURN_ACCESSOR + "_" + escaped_accessor; - - block_if_data->addLine("auto " + tmp + " = armarx::arondto::DateTime();"); - block_if_data->addLine("armarx::toAron(" + tmp + ", " + resolved_accessor + ");"); - block_if_data->addLine(variantAccessor + " = " + tmp + ".write(" + ARON_WRITER_ACCESSOR + ", "+ - "armarx::aron::Path("+ARON_PATH_ACCESSOR+", {"+simox::alg::join(p.getPath(), ", ")+"})); // of " + cppAccessor); - - return resolveMaybeWriteBlock(block_if_data, cppAccessor); - } - - CppBlockPtr DateTime::getReadBlock(const std::string& cppAccessor, const std::string& variantAccessor) const - { - CppBlockPtr block_if_data = std::make_shared<CppBlock>(); - std::string escaped_accessor = EscapeAccessor(cppAccessor); - std::string resolved_accessor = resolveMaybeAccessor(cppAccessor); - std::string tmp = ARON_VARIABLE_PREFIX + "_" + escaped_accessor + "_timeTmp"; - - block_if_data->addLine("auto " + tmp + " = armarx::arondto::DateTime();"); - block_if_data->addLine(tmp + ".read(" + ARON_READER_ACCESSOR + ", " + variantAccessor + "); // of " + cppAccessor); - block_if_data->addLine("armarx::fromAron(" + tmp + ", " + resolved_accessor + ");"); - return resolveMaybeReadBlock(block_if_data, cppAccessor, cppAccessor); - } - -} diff --git a/source/RobotAPI/libraries/aron/core/codegenerator/codewriter/cpp/generator/dto/DateTime.h b/source/RobotAPI/libraries/aron/core/codegenerator/codewriter/cpp/generator/dto/DateTime.h deleted file mode 100644 index d81031480..000000000 --- a/source/RobotAPI/libraries/aron/core/codegenerator/codewriter/cpp/generator/dto/DateTime.h +++ /dev/null @@ -1,46 +0,0 @@ -/* - * This file is part of ArmarX. - * - * Copyright (C) 2012-2016, High Performance Humanoid Technologies (H2T), - * Karlsruhe Institute of Technology (KIT), all rights reserved. - * - * ArmarX is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License version 2 as - * published by the Free Software Foundation. - * - * ArmarX is distributed in the hope that it will be useful, but - * WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see <http://www.gnu.org/licenses/>. - * - * @author Fabian Peller-Konrad (fabian dot peller-konrad at kit dot edu) - * @copyright http://www.gnu.org/licenses/gpl-2.0.txt - * GNU General Public License - */ - -#pragma once - -#include <RobotAPI/libraries/aron/core/codegenerator/codewriter/cpp/generator/detail/DtoGenerator.h> -#include <RobotAPI/libraries/aron/core/type/variant/dto/DateTime.h> - - -namespace armarx::aron::codegenerator::cpp::generator -{ - class DateTime : - public detail::DtoGenerator<type::DateTime, DateTime> - { - public: - /* constructors */ - DateTime(const type::DateTime& e); - virtual ~DateTime() = default; - - /* virtual implementations */ - std::vector<std::string> getRequiredIncludes() const override; - CppBlockPtr getWriteTypeBlock(const std::string& typeAccessor, const std::string& cppAccessor, const Path&, std::string& variantAccessor) const override; - CppBlockPtr getWriteBlock(const std::string& cppAccessor, const Path&, std::string& variantAccessor) const override; - CppBlockPtr getReadBlock(const std::string& cppAccessor, const std::string& variantAccessor) const override; - }; -} diff --git a/source/RobotAPI/libraries/aron/core/data/rw/json/Data.h b/source/RobotAPI/libraries/aron/core/data/rw/json/Data.h index 0506a1326..c9348cf61 100644 --- a/source/RobotAPI/libraries/aron/core/data/rw/json/Data.h +++ b/source/RobotAPI/libraries/aron/core/data/rw/json/Data.h @@ -60,74 +60,74 @@ namespace armarx::aron::data::rw::json namespace conversion { const std::map<data::Descriptor, std::string> Descriptor2String = { - {data::Descriptor::eDict, rw::json::constantes::DICT_TYPENAME_SLUG}, - {data::Descriptor::eList, rw::json::constantes::LIST_TYPENAME_SLUG}, - {data::Descriptor::eNDArray, rw::json::constantes::NDARRAY_TYPENAME_SLUG}, - {data::Descriptor::eInt, rw::json::constantes::INT_TYPENAME_SLUG}, - {data::Descriptor::eLong, rw::json::constantes::LONG_TYPENAME_SLUG}, - {data::Descriptor::eFloat, rw::json::constantes::FLOAT_TYPENAME_SLUG}, - {data::Descriptor::eDouble, rw::json::constantes::DOUBLE_TYPENAME_SLUG}, - {data::Descriptor::eBool, rw::json::constantes::BOOL_TYPENAME_SLUG}, - {data::Descriptor::eString, rw::json::constantes::STRING_TYPENAME_SLUG} + {data::Descriptor::DICT, rw::json::constantes::DICT_TYPENAME_SLUG}, + {data::Descriptor::LIST, rw::json::constantes::LIST_TYPENAME_SLUG}, + {data::Descriptor::NDARRAY, rw::json::constantes::NDARRAY_TYPENAME_SLUG}, + {data::Descriptor::INT, rw::json::constantes::INT_TYPENAME_SLUG}, + {data::Descriptor::LONG, rw::json::constantes::LONG_TYPENAME_SLUG}, + {data::Descriptor::FLOAT, rw::json::constantes::FLOAT_TYPENAME_SLUG}, + {data::Descriptor::DOUBLE, rw::json::constantes::DOUBLE_TYPENAME_SLUG}, + {data::Descriptor::BOOL, rw::json::constantes::BOOL_TYPENAME_SLUG}, + {data::Descriptor::STRING, rw::json::constantes::STRING_TYPENAME_SLUG} }; const auto String2Descriptor = aron::conversion::util::InvertMap(Descriptor2String); const std::map<type::Maybe, std::string> Maybe2String = { - {type::Maybe::eNone, "type::maybe::none"}, - {type::Maybe::eOptional, "type::maybe::optional"}, - {type::Maybe::eRawPointer, "type::maybe::raw_ptr"}, - {type::Maybe::eSharedPointer, "type::maybe::shared_ptr"}, - {type::Maybe::eUniquePointer, "type::maybe::unique_ptr"} + {type::Maybe::NONE, "type::maybe::NONE"}, + {type::Maybe::OPTIONAL, "type::maybe::OPTIONAL"}, + {type::Maybe::RAW_PTR, "type::maybe::RAW_PTR"}, + {type::Maybe::SHARED_PTR, "type::maybe::SHARED_PTR"}, + {type::Maybe::UNIQUE_PTR, "type::maybe::UNIQUE_PTR"} }; const auto String2Maybe = aron::conversion::util::InvertMap(Maybe2String); const std::map<type::ndarray::ElementType, std::string> NDArrayType2String = { - {type::ndarray::ElementType::int8, "type::ndarray::int8"}, - {type::ndarray::ElementType::int16, "type::ndarray::int16"}, - {type::ndarray::ElementType::int32, "type::ndarray::int32"}, - {type::ndarray::ElementType::uint8, "type::ndarray::uint8"}, - {type::ndarray::ElementType::uint16, "type::ndarray::uint16"}, - {type::ndarray::ElementType::uint32, "type::ndarray::uint32"}, - {type::ndarray::ElementType::float32, "type::ndarray::float32"}, - {type::ndarray::ElementType::float64, "type::ndarray::float64"} + {type::ndarray::ElementType::INT8, "type::ndarray::INT8"}, + {type::ndarray::ElementType::INT16, "type::ndarray::INT16"}, + {type::ndarray::ElementType::INT32, "type::ndarray::INT32"}, + {type::ndarray::ElementType::UINT8, "type::ndarray::UINT8"}, + {type::ndarray::ElementType::UINT16, "type::ndarray::UINT16"}, + {type::ndarray::ElementType::UINT32, "type::ndarray::UINT32"}, + {type::ndarray::ElementType::FLOAT32, "type::ndarray::FLOAT32"}, + {type::ndarray::ElementType::FLOAT64, "type::ndarray::FLOAT64"} }; const auto String2NDArrayType = aron::conversion::util::InvertMap(NDArrayType2String); const std::map<type::matrix::ElementType, std::string> MatrixType2String = { - {type::matrix::ElementType::int16, "type::matrix::int16"}, - {type::matrix::ElementType::int32, "type::matrix::int32"}, - {type::matrix::ElementType::int64, "type::matrix::int64"}, - {type::matrix::ElementType::float32, "type::matrix::float32"}, - {type::matrix::ElementType::float64, "type::matrix::float64"} + {type::matrix::ElementType::INT16, "type::matrix::INT16"}, + {type::matrix::ElementType::INT32, "type::matrix::INT32"}, + {type::matrix::ElementType::INT64, "type::matrix::INT64"}, + {type::matrix::ElementType::FLOAT32, "type::matrix::FLOAT32"}, + {type::matrix::ElementType::FLOAT64, "type::matrix::FLOAT64"} }; const auto String2MatrixType = aron::conversion::util::InvertMap(MatrixType2String); const std::map<type::quaternion::ElementType, std::string> QuaternionType2String = { - {type::quaternion::ElementType::float32, "type::quaternion::float32"}, - {type::quaternion::ElementType::float64, "type::quaternion::float64"} + {type::quaternion::ElementType::FLOAT32, "type::quaternion::FLOAT32"}, + {type::quaternion::ElementType::FLOAT64, "type::quaternion::FLOAT64"} }; const auto String2QuaternionType = aron::conversion::util::InvertMap(QuaternionType2String); const std::map<type::image::PixelType, std::string> PixelType2String = { - {type::image::PixelType::rgb24, "type::image::rgb24"}, - {type::image::PixelType::depth32, "type::image::depth32"} + {type::image::PixelType::RGB24, "type::image::RGB24"}, + {type::image::PixelType::DEPTH32, "type::image::DEPTH32"} }; const auto String2PixelType = aron::conversion::util::InvertMap(PixelType2String); const std::map<type::pointcloud::VoxelType, std::string> VoxelType2String = { - {type::pointcloud::VoxelType::PointXYZ, "type::pointcloud::pointxyz"}, - {type::pointcloud::VoxelType::PointXYZI, "type::pointcloud::pointxyzi"}, - {type::pointcloud::VoxelType::PointXYZL, "type::pointcloud::pointxyzl"}, - {type::pointcloud::VoxelType::PointXYZRGB, "type::pointcloud::pointxyzrgb"}, - {type::pointcloud::VoxelType::PointXYZRGBA, "type::pointcloud::pointxyzrgba"}, - {type::pointcloud::VoxelType::PointXYZRGBL, "type::pointcloud::pointxyzrgbl"}, - {type::pointcloud::VoxelType::PointXYZHSV, "type::pointcloud::pointxyzhsv"} + {type::pointcloud::VoxelType::POINT_XYZ, "type::pointcloud::POINT_XYZ"}, + {type::pointcloud::VoxelType::POINT_XYZI, "type::pointcloud::POINT_XYZI"}, + {type::pointcloud::VoxelType::POINT_XYZL, "type::pointcloud::POINT_XYZL"}, + {type::pointcloud::VoxelType::POINT_XYZRGB, "type::pointcloud::POINT_XYZRGB"}, + {type::pointcloud::VoxelType::POINT_XYZRGBA, "type::pointcloud::POINT_XYZRGBA"}, + {type::pointcloud::VoxelType::POINT_XYZRGBL, "type::pointcloud::POINT_XYZRGBL"}, + {type::pointcloud::VoxelType::POINT_XYZHSV, "type::pointcloud::POINT_XYZHSV"} }; const auto String2VoxelType = aron::conversion::util::InvertMap(VoxelType2String); } diff --git a/source/RobotAPI/libraries/aron/core/data/variant/Factory.cpp b/source/RobotAPI/libraries/aron/core/data/variant/Factory.cpp index c228a449d..f458e3d99 100644 --- a/source/RobotAPI/libraries/aron/core/data/variant/Factory.cpp +++ b/source/RobotAPI/libraries/aron/core/data/variant/Factory.cpp @@ -44,16 +44,16 @@ namespace armarx::aron::data auto descriptor = data::Aron2Descriptor(*aron); switch(descriptor) { - case data::Descriptor::eList: return std::make_unique<data::List>(data::dto::ListPtr::dynamicCast(aron), path); - case data::Descriptor::eDict: return std::make_unique<data::Dict>(data::dto::DictPtr::dynamicCast(aron), path); - case data::Descriptor::eNDArray: return std::make_unique<data::NDArray>(data::dto::NDArrayPtr::dynamicCast(aron), path); - case data::Descriptor::eInt: return std::make_unique<data::Int>(data::dto::AronIntPtr::dynamicCast(aron), path); - case data::Descriptor::eLong: return std::make_unique<data::Long>(data::dto::AronLongPtr::dynamicCast(aron), path); - case data::Descriptor::eFloat: return std::make_unique<data::Float>(data::dto::AronFloatPtr::dynamicCast(aron), path); - case data::Descriptor::eDouble: return std::make_unique<data::Double>(data::dto::AronDoublePtr::dynamicCast(aron), path); - case data::Descriptor::eString: return std::make_unique<data::String>(data::dto::AronStringPtr::dynamicCast(aron), path); - case data::Descriptor::eBool: return std::make_unique<data::Bool>(data::dto::AronBoolPtr::dynamicCast(aron), path); - case data::Descriptor::eUnknown: break; + case data::Descriptor::LIST: return std::make_unique<data::List>(data::dto::ListPtr::dynamicCast(aron), path); + case data::Descriptor::DICT: return std::make_unique<data::Dict>(data::dto::DictPtr::dynamicCast(aron), path); + case data::Descriptor::NDARRAY: return std::make_unique<data::NDArray>(data::dto::NDArrayPtr::dynamicCast(aron), path); + case data::Descriptor::INT: return std::make_unique<data::Int>(data::dto::AronIntPtr::dynamicCast(aron), path); + case data::Descriptor::LONG: return std::make_unique<data::Long>(data::dto::AronLongPtr::dynamicCast(aron), path); + case data::Descriptor::FLOAT: return std::make_unique<data::Float>(data::dto::AronFloatPtr::dynamicCast(aron), path); + case data::Descriptor::DOUBLE: return std::make_unique<data::Double>(data::dto::AronDoublePtr::dynamicCast(aron), path); + case data::Descriptor::STRING: return std::make_unique<data::String>(data::dto::AronStringPtr::dynamicCast(aron), path); + case data::Descriptor::BOOL: return std::make_unique<data::Bool>(data::dto::AronBoolPtr::dynamicCast(aron), path); + case data::Descriptor::UNKNOWN: break; } throw error::ValueNotValidException(__PRETTY_FUNCTION__, "", std::to_string((int) descriptor), path); } diff --git a/source/RobotAPI/libraries/aron/core/data/variant/complex/NDArray.cpp b/source/RobotAPI/libraries/aron/core/data/variant/complex/NDArray.cpp index 2132a2e4a..111068b39 100644 --- a/source/RobotAPI/libraries/aron/core/data/variant/complex/NDArray.cpp +++ b/source/RobotAPI/libraries/aron/core/data/variant/complex/NDArray.cpp @@ -35,13 +35,13 @@ namespace armarx::aron::data { // constructors NDArray::NDArray(const Path& path) : - detail::ComplexVariant<data::dto::NDArray, NDArray>::ComplexVariant(data::Descriptor::eNDArray, path) + detail::ComplexVariant<data::dto::NDArray, NDArray>::ComplexVariant(data::Descriptor::NDARRAY, path) { } NDArray::NDArray(const data::dto::NDArrayPtr& o, const Path& path) : - detail::ComplexVariant<data::dto::NDArray, NDArray>::ComplexVariant(o, data::Descriptor::eNDArray, path) + detail::ComplexVariant<data::dto::NDArray, NDArray>::ComplexVariant(o, data::Descriptor::NDARRAY, path) { } @@ -176,27 +176,27 @@ namespace armarx::aron::data type::Descriptor typeDesc = type->getDescriptor(); switch (typeDesc) { - case type::Descriptor::eMatrix: + case type::Descriptor::MATRIX: { auto casted = type::Matrix::DynamicCastAndCheck(type); return (aron->shape.size() == 3 && aron->shape[0] == casted->getRows() && aron->shape[1] == casted->getCols()); } - case type::Descriptor::eQuaternion: + case type::Descriptor::QUATERNION: { auto casted = type::Quaternion::DynamicCastAndCheck(type); return (aron->shape.size() == 3 && aron->shape[0] == 1 && aron->shape[1] == 4); } - case type::Descriptor::ePointCloud: + case type::Descriptor::POINTCLOUD: { auto casted = type::PointCloud::DynamicCastAndCheck(type); return (aron->shape.size() == 3); } - case type::Descriptor::eImage: + case type::Descriptor::IMAGE: { auto casted = type::Image::DynamicCastAndCheck(type); return (aron->shape.size() == 3); } - case type::Descriptor::eNDArray: + case type::Descriptor::NDARRAY: { auto casted = type::NDArray::DynamicCastAndCheck(type); return (aron->shape.size() == (unsigned int) casted->getNumberDimensions()); diff --git a/source/RobotAPI/libraries/aron/core/data/variant/container/Dict.cpp b/source/RobotAPI/libraries/aron/core/data/variant/container/Dict.cpp index 12b402fd0..478c6a2c8 100644 --- a/source/RobotAPI/libraries/aron/core/data/variant/container/Dict.cpp +++ b/source/RobotAPI/libraries/aron/core/data/variant/container/Dict.cpp @@ -34,12 +34,12 @@ namespace armarx::aron::data // constructors Dict::Dict(const Path& path) : - detail::ContainerVariant<data::dto::Dict, Dict>::ContainerVariant(data::Descriptor::eDict, path) + detail::ContainerVariant<data::dto::Dict, Dict>::ContainerVariant(data::Descriptor::DICT, path) { } Dict::Dict(const data::dto::DictPtr& o, const Path& path) : - detail::ContainerVariant<data::dto::Dict, Dict>::ContainerVariant(o, data::Descriptor::eDict, path) + detail::ContainerVariant<data::dto::Dict, Dict>::ContainerVariant(o, data::Descriptor::DICT, path) { for (const auto& [key, dataPtr] : this->aron->elements) { @@ -214,7 +214,7 @@ namespace armarx::aron::data switch (typeDesc) { - case type::Descriptor::eObject: + case type::Descriptor::OBJECT: { auto objectTypeNav = type::Object::DynamicCastAndCheck(type); for (const auto& [key, nav] : childrenNavigators) @@ -234,7 +234,7 @@ namespace armarx::aron::data } return true; } - case type::Descriptor::eDict: + case type::Descriptor::DICT: { auto dictTypeNav = type::Dict::DynamicCastAndCheck(type); for (const auto& [key, nav] : childrenNavigators) diff --git a/source/RobotAPI/libraries/aron/core/data/variant/container/Dict.h b/source/RobotAPI/libraries/aron/core/data/variant/container/Dict.h index 5317f7f05..498e59ee2 100644 --- a/source/RobotAPI/libraries/aron/core/data/variant/container/Dict.h +++ b/source/RobotAPI/libraries/aron/core/data/variant/container/Dict.h @@ -34,7 +34,7 @@ // ArmarX #include "../../../type/variant/container/Dict.h" #include "../../../type/variant/container/Object.h" -#include "../../../type/variant/dto/All.h" +#include "../../../type/variant/any/AnyObject.h" namespace armarx::aron::data { diff --git a/source/RobotAPI/libraries/aron/core/data/variant/container/List.cpp b/source/RobotAPI/libraries/aron/core/data/variant/container/List.cpp index 74eb78a75..84bf1a200 100644 --- a/source/RobotAPI/libraries/aron/core/data/variant/container/List.cpp +++ b/source/RobotAPI/libraries/aron/core/data/variant/container/List.cpp @@ -35,12 +35,12 @@ namespace armarx::aron::data { // constructors List::List(const Path& path) : - detail::ContainerVariant<data::dto::List, List>::ContainerVariant(data::Descriptor::eList, path) + detail::ContainerVariant<data::dto::List, List>::ContainerVariant(data::Descriptor::LIST, path) { } List::List(const data::dto::ListPtr& l, const Path& path) : - detail::ContainerVariant<data::dto::List, List>::ContainerVariant(l, data::Descriptor::eList, path) + detail::ContainerVariant<data::dto::List, List>::ContainerVariant(l, data::Descriptor::LIST, path) { unsigned int i = 0; for (const auto& dataPtr : l->elements) @@ -216,7 +216,7 @@ namespace armarx::aron::data type::Descriptor typeDesc = type->getDescriptor(); switch (typeDesc) { - case type::Descriptor::eList: + case type::Descriptor::LIST: { auto listTypeNav = type::List::DynamicCastAndCheck(type); for (const auto& nav : childrenNavigators) @@ -232,7 +232,7 @@ namespace armarx::aron::data } return true; } - case type::Descriptor::eTuple: + case type::Descriptor::TUPLE: { auto tupleTypeNav = type::Tuple::DynamicCastAndCheck(type); unsigned int i = 0; @@ -249,7 +249,7 @@ namespace armarx::aron::data } return true; } - case type::Descriptor::ePair: + case type::Descriptor::PAIR: { auto pairTypeNav = type::Pair::DynamicCastAndCheck(type); if (childrenSize() != 2) diff --git a/source/RobotAPI/libraries/aron/core/data/variant/detail/SpecializedVariant.h b/source/RobotAPI/libraries/aron/core/data/variant/detail/SpecializedVariant.h index 8d83766b8..e8a00e47c 100644 --- a/source/RobotAPI/libraries/aron/core/data/variant/detail/SpecializedVariant.h +++ b/source/RobotAPI/libraries/aron/core/data/variant/detail/SpecializedVariant.h @@ -114,7 +114,9 @@ namespace armarx::aron::data::detail } auto casted = DerivedT::DynamicCast(n); - ARMARX_CHECK_NOT_NULL(casted); + ARMARX_CHECK_NOT_NULL(casted) << "The path was: " << n->getPath().toString() << ".\n" + << "It has the descriptor: '" << data::defaultconversion::string::Descriptor2String.at(n->getDescriptor()) << "'.\n" + << "And the typeid: " << typeid(n).name() << ". Tried to cast to " << typeid(PointerType).name(); return casted; } diff --git a/source/RobotAPI/libraries/aron/core/data/variant/primitive/Bool.cpp b/source/RobotAPI/libraries/aron/core/data/variant/primitive/Bool.cpp index 5b5cb2b0e..0e68bbc6d 100644 --- a/source/RobotAPI/libraries/aron/core/data/variant/primitive/Bool.cpp +++ b/source/RobotAPI/libraries/aron/core/data/variant/primitive/Bool.cpp @@ -27,17 +27,17 @@ namespace armarx::aron::data { /* constructors */ Bool::Bool(const data::dto::AronBoolPtr& o, const Path& path) : - detail::PrimitiveVariant<data::dto::AronBool, bool, Bool>::PrimitiveVariant(o, data::Descriptor::eBool, path) + detail::PrimitiveVariant<data::dto::AronBool, bool, Bool>::PrimitiveVariant(o, data::Descriptor::BOOL, path) { } Bool::Bool(const Path& path) : - detail::PrimitiveVariant<data::dto::AronBool, bool, Bool>::PrimitiveVariant(data::Descriptor::eBool, path) + detail::PrimitiveVariant<data::dto::AronBool, bool, Bool>::PrimitiveVariant(data::Descriptor::BOOL, path) { } Bool::Bool(const bool d, const Path& path) : - detail::PrimitiveVariant<data::dto::AronBool, bool, Bool>::PrimitiveVariant(d, data::Descriptor::eBool, path) + detail::PrimitiveVariant<data::dto::AronBool, bool, Bool>::PrimitiveVariant(d, data::Descriptor::BOOL, path) { } @@ -111,7 +111,7 @@ namespace armarx::aron::data bool Bool::fullfillsType(const type::VariantPtr& type) const { if (!type) return true; - return type->getDescriptor() == type::Descriptor::eBool; + return type->getDescriptor() == type::Descriptor::BOOL; } type::VariantPtr Bool::recalculateType() const diff --git a/source/RobotAPI/libraries/aron/core/data/variant/primitive/Double.cpp b/source/RobotAPI/libraries/aron/core/data/variant/primitive/Double.cpp index 906afeeea..87ea9eeac 100644 --- a/source/RobotAPI/libraries/aron/core/data/variant/primitive/Double.cpp +++ b/source/RobotAPI/libraries/aron/core/data/variant/primitive/Double.cpp @@ -31,17 +31,17 @@ namespace armarx::aron::data { /* constructors */ Double::Double(const data::dto::AronDoublePtr& o, const Path& path) : - detail::PrimitiveVariant<data::dto::AronDouble, double, Double>::PrimitiveVariant(o, data::Descriptor::eDouble, path) + detail::PrimitiveVariant<data::dto::AronDouble, double, Double>::PrimitiveVariant(o, data::Descriptor::DOUBLE, path) { } Double::Double(const Path& path) : - detail::PrimitiveVariant<data::dto::AronDouble, double, Double>::PrimitiveVariant(data::Descriptor::eDouble, path) + detail::PrimitiveVariant<data::dto::AronDouble, double, Double>::PrimitiveVariant(data::Descriptor::DOUBLE, path) { } Double::Double(const double d, const Path& path) : - detail::PrimitiveVariant<data::dto::AronDouble, double, Double>::PrimitiveVariant(d, data::Descriptor::eDouble, path) + detail::PrimitiveVariant<data::dto::AronDouble, double, Double>::PrimitiveVariant(d, data::Descriptor::DOUBLE, path) { } @@ -104,7 +104,7 @@ namespace armarx::aron::data bool Double::fullfillsType(const type::VariantPtr& type) const { if (!type) return true; - return type->getDescriptor() == type::Descriptor::eDouble; + return type->getDescriptor() == type::Descriptor::DOUBLE; } type::VariantPtr Double::recalculateType() const diff --git a/source/RobotAPI/libraries/aron/core/data/variant/primitive/Float.cpp b/source/RobotAPI/libraries/aron/core/data/variant/primitive/Float.cpp index 154591f68..8dd7721c4 100644 --- a/source/RobotAPI/libraries/aron/core/data/variant/primitive/Float.cpp +++ b/source/RobotAPI/libraries/aron/core/data/variant/primitive/Float.cpp @@ -27,17 +27,17 @@ namespace armarx::aron::data { /* constructors */ Float::Float(const data::dto::AronFloatPtr& o, const Path& path) : - detail::PrimitiveVariant<data::dto::AronFloat, float, Float>::PrimitiveVariant(o, data::Descriptor::eFloat, path) + detail::PrimitiveVariant<data::dto::AronFloat, float, Float>::PrimitiveVariant(o, data::Descriptor::FLOAT, path) { } Float::Float(const Path& path) : - detail::PrimitiveVariant<data::dto::AronFloat, float, Float>::PrimitiveVariant(data::Descriptor::eFloat, path) + detail::PrimitiveVariant<data::dto::AronFloat, float, Float>::PrimitiveVariant(data::Descriptor::FLOAT, path) { } Float::Float(const float d, const Path& path) : - detail::PrimitiveVariant<data::dto::AronFloat, float, Float>::PrimitiveVariant(d, data::Descriptor::eFloat, path) + detail::PrimitiveVariant<data::dto::AronFloat, float, Float>::PrimitiveVariant(d, data::Descriptor::FLOAT, path) { } @@ -101,7 +101,7 @@ namespace armarx::aron::data bool Float::fullfillsType(const type::VariantPtr& type) const { if (!type) return true; - return type->getDescriptor() == type::Descriptor::eFloat; + return type->getDescriptor() == type::Descriptor::FLOAT; } type::VariantPtr Float::recalculateType() const diff --git a/source/RobotAPI/libraries/aron/core/data/variant/primitive/Int.cpp b/source/RobotAPI/libraries/aron/core/data/variant/primitive/Int.cpp index 14299d05a..cc4d9dc2e 100644 --- a/source/RobotAPI/libraries/aron/core/data/variant/primitive/Int.cpp +++ b/source/RobotAPI/libraries/aron/core/data/variant/primitive/Int.cpp @@ -30,17 +30,17 @@ namespace armarx::aron::data { /* constructors */ Int::Int(const data::dto::AronIntPtr& o, const Path& path) : - detail::PrimitiveVariant<data::dto::AronInt, int, Int>::PrimitiveVariant(o, data::Descriptor::eInt, path) + detail::PrimitiveVariant<data::dto::AronInt, int, Int>::PrimitiveVariant(o, data::Descriptor::INT, path) { } Int::Int(const Path& path) : - detail::PrimitiveVariant<data::dto::AronInt, int, Int>::PrimitiveVariant(data::Descriptor::eInt, path) + detail::PrimitiveVariant<data::dto::AronInt, int, Int>::PrimitiveVariant(data::Descriptor::INT, path) { } Int::Int(const int d, const Path& path) : - detail::PrimitiveVariant<data::dto::AronInt, int, Int>::PrimitiveVariant(d, data::Descriptor::eInt, path) + detail::PrimitiveVariant<data::dto::AronInt, int, Int>::PrimitiveVariant(d, data::Descriptor::INT, path) { } @@ -104,7 +104,7 @@ namespace armarx::aron::data bool Int::fullfillsType(const type::VariantPtr& type) const { if (!type) return true; - return type->getDescriptor() == type::Descriptor::eInt || type->getDescriptor() == type::Descriptor::eIntEnum; + return type->getDescriptor() == type::Descriptor::INT || type->getDescriptor() == type::Descriptor::INT_ENUM; } type::VariantPtr Int::recalculateType() const diff --git a/source/RobotAPI/libraries/aron/core/data/variant/primitive/Long.cpp b/source/RobotAPI/libraries/aron/core/data/variant/primitive/Long.cpp index 989caa469..6a271cdc8 100644 --- a/source/RobotAPI/libraries/aron/core/data/variant/primitive/Long.cpp +++ b/source/RobotAPI/libraries/aron/core/data/variant/primitive/Long.cpp @@ -31,17 +31,17 @@ namespace armarx::aron::data { /* constructors */ Long::Long(const data::dto::AronLongPtr& o, const Path& path) : - detail::PrimitiveVariant<data::dto::AronLong, long, Long>::PrimitiveVariant(o, data::Descriptor::eLong, path) + detail::PrimitiveVariant<data::dto::AronLong, long, Long>::PrimitiveVariant(o, data::Descriptor::LONG, path) { } Long::Long(const Path& path) : - detail::PrimitiveVariant<data::dto::AronLong, long, Long>::PrimitiveVariant(data::Descriptor::eLong, path) + detail::PrimitiveVariant<data::dto::AronLong, long, Long>::PrimitiveVariant(data::Descriptor::LONG, path) { } Long::Long(const long d, const Path& path) : - detail::PrimitiveVariant<data::dto::AronLong, long, Long>::PrimitiveVariant(d, data::Descriptor::eLong, path) + detail::PrimitiveVariant<data::dto::AronLong, long, Long>::PrimitiveVariant(d, data::Descriptor::LONG, path) { } @@ -105,7 +105,7 @@ namespace armarx::aron::data bool Long::fullfillsType(const type::VariantPtr& type) const { if (!type) return true; - return type->getDescriptor() == type::Descriptor::eLong; + return type->getDescriptor() == type::Descriptor::LONG; } type::VariantPtr Long::recalculateType() const diff --git a/source/RobotAPI/libraries/aron/core/data/variant/primitive/String.cpp b/source/RobotAPI/libraries/aron/core/data/variant/primitive/String.cpp index 0c4ec5bd3..6415245f3 100644 --- a/source/RobotAPI/libraries/aron/core/data/variant/primitive/String.cpp +++ b/source/RobotAPI/libraries/aron/core/data/variant/primitive/String.cpp @@ -27,17 +27,17 @@ namespace armarx::aron::data { /* constructors */ String::String(const data::dto::AronStringPtr& o, const Path& path) : - detail::PrimitiveVariant<data::dto::AronString, std::string, String>::PrimitiveVariant(o, data::Descriptor::eString, path) + detail::PrimitiveVariant<data::dto::AronString, std::string, String>::PrimitiveVariant(o, data::Descriptor::STRING, path) { } String::String(const Path& path) : - detail::PrimitiveVariant<data::dto::AronString, std::string, String>::PrimitiveVariant(data::Descriptor::eString, path) + detail::PrimitiveVariant<data::dto::AronString, std::string, String>::PrimitiveVariant(data::Descriptor::STRING, path) { } String::String(const std::string& d, const Path& path) : - detail::PrimitiveVariant<data::dto::AronString, std::string, String>::PrimitiveVariant(d, data::Descriptor::eString, path) + detail::PrimitiveVariant<data::dto::AronString, std::string, String>::PrimitiveVariant(d, data::Descriptor::STRING, path) { } @@ -101,7 +101,7 @@ namespace armarx::aron::data bool String::fullfillsType(const type::VariantPtr& type) const { if (!type) return true; - return type->getDescriptor() == type::Descriptor::eString; + return type->getDescriptor() == type::Descriptor::STRING; } type::VariantPtr String::recalculateType() const diff --git a/source/RobotAPI/libraries/aron/core/data/visitor/RecursiveVisitor.h b/source/RobotAPI/libraries/aron/core/data/visitor/RecursiveVisitor.h index d691676b2..60cb4be0f 100644 --- a/source/RobotAPI/libraries/aron/core/data/visitor/RecursiveVisitor.h +++ b/source/RobotAPI/libraries/aron/core/data/visitor/RecursiveVisitor.h @@ -107,7 +107,6 @@ namespace armarx::aron::data virtual void visitDouble(DataInput& elementData, TypeInput& elementType) {}; virtual void visitBool(DataInput& elementData, TypeInput& elementType) {}; virtual void visitString(DataInput& elementData, TypeInput& elementType) {}; - virtual void visitDateTime(DataInput& elementData, TypeInput& elementType) {}; virtual void visitAnyObject(DataInput& elementData, TypeInput& elementType) {}; virtual void visitUnknown(DataInput& elementData, TypeInput& elementType) { throw error::AronException(__PRETTY_FUNCTION__, "Unknown type in visitor."); @@ -131,7 +130,7 @@ namespace armarx::aron::data data::Descriptor descriptor = v.getDescriptor(o); switch (descriptor) { - case data::Descriptor::eList: + case data::Descriptor::LIST: { v.visitListOnEnter(o); unsigned int i = 0; @@ -143,7 +142,7 @@ namespace armarx::aron::data v.visitListOnExit(o); return; } - case data::Descriptor::eDict: + case data::Descriptor::DICT: { v.visitDictOnEnter(o); for (auto& [key, value] : v.getDictElements(o)) @@ -153,21 +152,21 @@ namespace armarx::aron::data v.visitDictOnExit(o); return; } - case data::Descriptor::eNDArray: + case data::Descriptor::NDARRAY: return v.visitNDArray(o); - case data::Descriptor::eInt: + case data::Descriptor::INT: return v.visitInt(o); - case data::Descriptor::eLong: + case data::Descriptor::LONG: return v.visitLong(o); - case data::Descriptor::eFloat: + case data::Descriptor::FLOAT: return v.visitFloat(o); - case data::Descriptor::eDouble: + case data::Descriptor::DOUBLE: return v.visitDouble(o); - case data::Descriptor::eString: + case data::Descriptor::STRING: return v.visitString(o); - case data::Descriptor::eBool: + case data::Descriptor::BOOL: return v.visitBool(o); - case data::Descriptor::eUnknown: + case data::Descriptor::UNKNOWN: return v.visitUnknown(o); } } @@ -183,7 +182,7 @@ namespace armarx::aron::data type::Descriptor descriptor = v.getDescriptor(o, t); switch (descriptor) { - case type::Descriptor::eList: + case type::Descriptor::LIST: { v.visitListOnEnter(o, t); unsigned int i = 0; @@ -195,7 +194,7 @@ namespace armarx::aron::data v.visitListOnExit(o, t); return; } - case type::Descriptor::ePair: + case type::Descriptor::PAIR: { v.visitPairOnEnter(o, t); auto pair = v.getPairElements(o, t); @@ -206,7 +205,7 @@ namespace armarx::aron::data v.visitPairOnExit(o, t); return; } - case type::Descriptor::eTuple: + case type::Descriptor::TUPLE: { v.visitTupleOnEnter(o, t); unsigned int i = 0; @@ -218,7 +217,7 @@ namespace armarx::aron::data v.visitTupleOnExit(o, t); return; } - case type::Descriptor::eDict: + case type::Descriptor::DICT: { v.visitDictOnEnter(o, t); for (auto& [key, pair] : v.getDictElements(o, t)) @@ -228,7 +227,7 @@ namespace armarx::aron::data v.visitDictOnExit(o, t); return; } - case type::Descriptor::eObject: + case type::Descriptor::OBJECT: { v.visitObjectOnEnter(o, t); for (auto& [key, pair] : v.getObjectElements(o, t)) @@ -238,35 +237,33 @@ namespace armarx::aron::data v.visitObjectOnExit(o, t); return; } - case type::Descriptor::eNDArray: + case type::Descriptor::NDARRAY: return v.visitNDArray(o, t); - case type::Descriptor::eMatrix: + case type::Descriptor::MATRIX: return v.visitMatrix(o, t); - case type::Descriptor::eImage: + case type::Descriptor::IMAGE: return v.visitImage(o, t); - case type::Descriptor::ePointCloud: + case type::Descriptor::POINTCLOUD: return v.visitPointCloud(o, t); - case type::Descriptor::eQuaternion: + case type::Descriptor::QUATERNION: return v.visitQuaternion(o, t); - case type::Descriptor::eInt: + case type::Descriptor::INT: return v.visitInt(o, t); - case type::Descriptor::eLong: + case type::Descriptor::LONG: return v.visitLong(o, t); - case type::Descriptor::eFloat: + case type::Descriptor::FLOAT: return v.visitFloat(o, t); - case type::Descriptor::eDouble: + case type::Descriptor::DOUBLE: return v.visitDouble(o, t); - case type::Descriptor::eString: + case type::Descriptor::STRING: return v.visitString(o, t); - case type::Descriptor::eBool: + case type::Descriptor::BOOL: return v.visitBool(o, t); - case type::Descriptor::eDateTime: - return v.visitDateTime(o, t); - case type::Descriptor::eAnyObject: + case type::Descriptor::ANY_OBJECT: return v.visitAnyObject(o, t); - case type::Descriptor::eIntEnum: + case type::Descriptor::INT_ENUM: return v.visitIntEnum(o, t); - case type::Descriptor::eUnknown: + case type::Descriptor::UNKNOWN: return v.visitUnknown(o, t); } } diff --git a/source/RobotAPI/libraries/aron/core/data/visitor/Visitor.h b/source/RobotAPI/libraries/aron/core/data/visitor/Visitor.h index 0a6f01aa5..d7c62f104 100644 --- a/source/RobotAPI/libraries/aron/core/data/visitor/Visitor.h +++ b/source/RobotAPI/libraries/aron/core/data/visitor/Visitor.h @@ -104,7 +104,6 @@ namespace armarx::aron::data virtual void visitDouble(DataInput&, TypeInput&) {}; virtual void visitBool(DataInput&, TypeInput&) {}; virtual void visitString(DataInput&, TypeInput&) {}; - virtual void visitDateTime(DataInput&, TypeInput&) {}; virtual void visitAnyObject(DataInput&, TypeInput&) {}; virtual void visitUnknown(DataInput&, TypeInput&) { throw error::AronException(__PRETTY_FUNCTION__, "Unknown type in visitor."); } virtual ~TypedVisitor() = default; @@ -127,25 +126,25 @@ namespace armarx::aron::data auto descriptor = v.getDescriptor(o); switch (descriptor) { - case data::Descriptor::eList: + case data::Descriptor::LIST: return v.visitList(o); - case data::Descriptor::eDict: + case data::Descriptor::DICT: return v.visitDict(o); - case data::Descriptor::eNDArray: + case data::Descriptor::NDARRAY: return v.visitNDArray(o); - case data::Descriptor::eInt: + case data::Descriptor::INT: return v.visitInt(o); - case data::Descriptor::eLong: + case data::Descriptor::LONG: return v.visitLong(o); - case data::Descriptor::eFloat: + case data::Descriptor::FLOAT: return v.visitFloat(o); - case data::Descriptor::eDouble: + case data::Descriptor::DOUBLE: return v.visitDouble(o); - case data::Descriptor::eString: + case data::Descriptor::STRING: return v.visitString(o); - case data::Descriptor::eBool: + case data::Descriptor::BOOL: return v.visitBool(o); - case data::Descriptor::eUnknown: + case data::Descriptor::UNKNOWN: return v.visitUnknown(o); } } @@ -162,45 +161,43 @@ namespace armarx::aron::data auto descriptor = v.getDescriptor(o, t); switch (descriptor) { - case type::Descriptor::eObject: + case type::Descriptor::OBJECT: return v.visitObject(o, t); - case type::Descriptor::eList: + case type::Descriptor::LIST: return v.visitList(o, t); - case type::Descriptor::eDict: + case type::Descriptor::DICT: return v.visitDict(o, t); - case type::Descriptor::ePair: + case type::Descriptor::PAIR: return v.visitPair(o, t); - case type::Descriptor::eTuple: + case type::Descriptor::TUPLE: return v.visitTuple(o, t); - case type::Descriptor::eNDArray: + case type::Descriptor::NDARRAY: return v.visitNDArray(o, t); - case type::Descriptor::eMatrix: + case type::Descriptor::MATRIX: return v.visitMatrix(o, t); - case type::Descriptor::eImage: + case type::Descriptor::IMAGE: return v.visitImage(o, t); - case type::Descriptor::ePointCloud: + case type::Descriptor::POINTCLOUD: return v.visitPointCloud(o, t); - case type::Descriptor::eQuaternion: + case type::Descriptor::QUATERNION: return v.visitQuaternion(o, t); - case type::Descriptor::eInt: + case type::Descriptor::INT: return v.visitInt(o, t); - case type::Descriptor::eLong: + case type::Descriptor::LONG: return v.visitLong(o, t); - case type::Descriptor::eFloat: + case type::Descriptor::FLOAT: return v.visitFloat(o, t); - case type::Descriptor::eDouble: + case type::Descriptor::DOUBLE: return v.visitDouble(o, t); - case type::Descriptor::eString: + case type::Descriptor::STRING: return v.visitString(o, t); - case type::Descriptor::eBool: + case type::Descriptor::BOOL: return v.visitBool(o, t); - case type::Descriptor::eDateTime: - return v.visitDateTime(o, t); - case type::Descriptor::eAnyObject: + case type::Descriptor::ANY_OBJECT: return v.visitAnyObject(o, t); - case type::Descriptor::eIntEnum: + case type::Descriptor::INT_ENUM: return v.visitIntEnum(o, t); - case type::Descriptor::eUnknown: + case type::Descriptor::UNKNOWN: return v.visitUnknown(o, t); } } diff --git a/source/RobotAPI/libraries/aron/core/data/visitor/nlohmannJSON/NlohmannJSONVisitor.cpp b/source/RobotAPI/libraries/aron/core/data/visitor/nlohmannJSON/NlohmannJSONVisitor.cpp index 623356c73..84adf5c1e 100644 --- a/source/RobotAPI/libraries/aron/core/data/visitor/nlohmannJSON/NlohmannJSONVisitor.cpp +++ b/source/RobotAPI/libraries/aron/core/data/visitor/nlohmannJSON/NlohmannJSONVisitor.cpp @@ -30,7 +30,7 @@ namespace armarx::aron::data { if (n == nlohmann::json()) { - return data::Descriptor::eUnknown; + return data::Descriptor::UNKNOWN; } std::string t = n[armarx::aron::data::rw::json::constantes::TYPE_SLUG]; return armarx::aron::data::rw::json::conversion::String2Descriptor.at(t); diff --git a/source/RobotAPI/libraries/aron/core/data/visitor/variant/VariantVisitor.cpp b/source/RobotAPI/libraries/aron/core/data/visitor/variant/VariantVisitor.cpp index b408468fd..b0799cdbd 100644 --- a/source/RobotAPI/libraries/aron/core/data/visitor/variant/VariantVisitor.cpp +++ b/source/RobotAPI/libraries/aron/core/data/visitor/variant/VariantVisitor.cpp @@ -36,7 +36,7 @@ namespace armarx::aron::data { if (!n) { - return data::Descriptor::eUnknown; + return data::Descriptor::UNKNOWN; } return n->getDescriptor(); } @@ -117,7 +117,7 @@ namespace armarx::aron::data type::Descriptor ConstTypedVariantVisitor::GetDescriptor(DataInput& i, TypeInput& j) { auto t_desc = type::ConstVariantVisitor::GetDescriptor(j); - if (t_desc == type::Descriptor::eUnknown) + if (t_desc == type::Descriptor::UNKNOWN) { auto d_desc = ConstVariantVisitor::GetDescriptor(i); t_desc = aron::data::defaultconversion::Data2TypeDescriptor.at(d_desc); @@ -249,13 +249,6 @@ namespace armarx::aron::data visitAronVariant(d, t); } - void ConstTypedVariantVisitor::visitDateTime(DataInput& i, TypeInput& j) - { - auto d = data::Dict::DynamicCastAndCheck(i); - auto t = type::DateTime::DynamicCastAndCheck(j); - visitAronVariant(d, t); - } - void ConstTypedVariantVisitor::visitAronVariant(const data::DictPtr&, const type::ObjectPtr&) {} void ConstTypedVariantVisitor::visitAronVariant(const data::DictPtr&, const type::DictPtr&) {} void ConstTypedVariantVisitor::visitAronVariant(const data::ListPtr&, const type::ListPtr&) {} @@ -273,7 +266,6 @@ namespace armarx::aron::data void ConstTypedVariantVisitor::visitAronVariant(const data::DoublePtr&, const type::DoublePtr&) {} void ConstTypedVariantVisitor::visitAronVariant(const data::BoolPtr&, const type::BoolPtr&) {} void ConstTypedVariantVisitor::visitAronVariant(const data::StringPtr&, const type::StringPtr&) {} - void ConstTypedVariantVisitor::visitAronVariant(const data::DictPtr&, const type::DateTimePtr&) {} @@ -799,13 +791,6 @@ namespace armarx::aron::data visitAronVariant(d, t); } - void RecursiveConstTypedVariantVisitor::visitDateTime(DataInput& i, TypeInput& j) - { - auto d = data::Dict::DynamicCastAndCheck(i); - auto t = type::DateTime::DynamicCastAndCheck(j); - visitAronVariant(d, t); - } - // see above void RecursiveConstTypedVariantVisitor::visitAronVariantOnEnter(const data::DictPtr&, const type::ObjectPtr&) {} @@ -826,7 +811,6 @@ namespace armarx::aron::data void RecursiveConstTypedVariantVisitor::visitAronVariant(const data::IntPtr&, const type::IntEnumPtr&) {} void RecursiveConstTypedVariantVisitor::visitAronVariant(const data::IntPtr&, const type::IntPtr&) {} void RecursiveConstTypedVariantVisitor::visitAronVariant(const data::LongPtr&, const type::LongPtr&) {} - void RecursiveConstTypedVariantVisitor::visitAronVariant(const data::DictPtr&, const type::DateTimePtr&) {} void RecursiveConstTypedVariantVisitor::visitAronVariant(const data::FloatPtr&, const type::FloatPtr&) {} void RecursiveConstTypedVariantVisitor::visitAronVariant(const data::DoublePtr&, const type::DoublePtr&) {} void RecursiveConstTypedVariantVisitor::visitAronVariant(const data::BoolPtr&, const type::BoolPtr&) {} diff --git a/source/RobotAPI/libraries/aron/core/data/visitor/variant/VariantVisitor.h b/source/RobotAPI/libraries/aron/core/data/visitor/variant/VariantVisitor.h index f1ce3e33d..726adfd34 100644 --- a/source/RobotAPI/libraries/aron/core/data/visitor/variant/VariantVisitor.h +++ b/source/RobotAPI/libraries/aron/core/data/visitor/variant/VariantVisitor.h @@ -93,7 +93,6 @@ namespace armarx::aron::data void visitDouble(DataInput&, TypeInput&) override; void visitBool(DataInput&, TypeInput&) override; void visitString(DataInput&, TypeInput&) override; - void visitDateTime(DataInput&, TypeInput&) override; // see above virtual void visitAronVariant(const data::DictPtr&, const type::ObjectPtr&); @@ -113,7 +112,6 @@ namespace armarx::aron::data virtual void visitAronVariant(const data::DoublePtr&, const type::DoublePtr&); virtual void visitAronVariant(const data::BoolPtr&, const type::BoolPtr&); virtual void visitAronVariant(const data::StringPtr&, const type::StringPtr&); - virtual void visitAronVariant(const data::DictPtr&, const type::DateTimePtr&); }; /** @@ -236,7 +234,6 @@ namespace armarx::aron::data void visitDouble(DataInput&, TypeInput&) override; void visitBool(DataInput&, TypeInput&) override; void visitString(DataInput&, TypeInput&) override; - void visitDateTime(DataInput&, TypeInput&) override; // see above virtual void visitAronVariantOnEnter(const data::DictPtr&, const type::ObjectPtr&); @@ -261,6 +258,5 @@ namespace armarx::aron::data virtual void visitAronVariant(const data::DoublePtr&, const type::DoublePtr&); virtual void visitAronVariant(const data::BoolPtr&, const type::BoolPtr&); virtual void visitAronVariant(const data::StringPtr&, const type::StringPtr&); - virtual void visitAronVariant(const data::DictPtr&, const type::DateTimePtr&); }; } diff --git a/source/RobotAPI/libraries/aron/core/legacy/DataVisitor.cpp b/source/RobotAPI/libraries/aron/core/legacy/DataVisitor.cpp deleted file mode 100644 index f86ae598e..000000000 --- a/source/RobotAPI/libraries/aron/core/legacy/DataVisitor.cpp +++ /dev/null @@ -1,127 +0,0 @@ -#include "DataVisitor.h" - -#include <SimoxUtility/meta/type_name.h> - -#include <ArmarXCore/core/exceptions/local/ExpressionException.h> - - -namespace armarx::aron::visitor -{ - - - DataVisitor::DataVisitor() - { - } - - DataVisitor::~DataVisitor() - { - } - - - bool DataVisitor::applyTo(data::dto::GenericDataPtr& data) - { - ARMARX_CHECK_NOT_NULL(data); - return applyTo(*DataNavigator::FromAronDTO(data)); - } - - bool DataVisitor::applyTo(DataVisitor::DataNavigator& navigator) - { - return this->applyTo("", navigator); - } - - bool DataVisitor::applyTo(const std::string& key, DataNavigator& navigator) - { - auto handleCollection = [this, key](auto & n) - { - if (!visitEnter(key, n)) - { - return false; - } - if (!applyToChildren(n)) - { - return false; - } - if (!visitExit(key, n)) - { - return false; - } - return true; - }; - - if (auto n = dynamic_cast<DictDataNavigator*>(&navigator)) - { - return handleCollection(*n); - } - else if (auto n = dynamic_cast<ListDataNavigator*>(&navigator)) - { - return handleCollection(*n); - } - - ARMARX_CHECK_EQUAL(navigator.childrenSize(), 0) - << simox::meta::get_type_name(navigator); - - if (auto n = dynamic_cast<BoolDataNavigator*>(&navigator)) - { - return visit(key, *n); - } - else if (auto n = dynamic_cast<DoubleDataNavigator*>(&navigator)) - { - return visit(key, *n); - } - else if (auto n = dynamic_cast<FloatDataNavigator*>(&navigator)) - { - return visit(key, *n); - } - else if (auto n = dynamic_cast<IntDataNavigator*>(&navigator)) - { - return visit(key, *n); - } - else if (auto n = dynamic_cast<LongDataNavigator*>(&navigator)) - { - return visit(key, *n); - } - else if (auto n = dynamic_cast<NDArrayDataNavigator*>(&navigator)) - { - return visit(key, *n); - } - else if (auto n = dynamic_cast<StringDataNavigator*>(&navigator)) - { - return visit(key, *n); - } - ARMARX_CHECK(false) << "Unhandled AronDataNavigatorType '" << simox::meta::get_type_name(navigator) << "'."; - } - - bool DataVisitor::applyToChildren(DictDataNavigator& navigator) - { - for (const std::string& key : navigator.getAllKeys()) - { - auto child = navigator.getElement(key); - if (child) - { - if (!applyTo(key, *child)) - { - return false; - } - } - } - return true; - } - - bool DataVisitor::applyToChildren(ListDataNavigator& navigator) - { - size_t i = 0; - for (auto& child : navigator.getChildren()) - { - if (child) - { - if (!applyTo(std::to_string(i), *child)) - { - return false; - } - } - ++i; - } - return true; - } - -} diff --git a/source/RobotAPI/libraries/aron/core/legacy/DataVisitor.h b/source/RobotAPI/libraries/aron/core/legacy/DataVisitor.h deleted file mode 100644 index a5b3eb18c..000000000 --- a/source/RobotAPI/libraries/aron/core/legacy/DataVisitor.h +++ /dev/null @@ -1,265 +0,0 @@ -#pragma once - -#include <string> - -#include <RobotAPI/libraries/aron/core/data/variant/All.h> - - -namespace armarx::aron::visitor -{ - - /** - * @brief A visitor traversing an `aron::data::dto::GenericDataPtr` using - * `aron::datanavigator::Navigator`s, taking care of type checking, - * casting and hierarchical traversal. - * - * To use it, create a class deriving from `AronDataVisitor` and - * override the overloads of `visitEnter()`, `visitExit()` and `visit()` - * for the types you would like to handle (see blow for a copy-and-paste - * example). - * Then, instantiate your derived visitor and call `applyTo()`, passing - * the `AronDataPtr` or the root `Navigator`. - * - * For dicts and lists, you will get a `visitEnter()`/`visitExit()` pair. - * For types without children (e.g. primitive types), you get a single - * `visit()` call. - * - * Each visit function should return true to continue traversal or - * false to stop it. All default implementations return true. - * - * To the the location of the passed navigator in the original `AronData`, - * use `navigator.getPath()`. - * - * @see `aron::data::dto::GenericDataPtr` - * @see `aron::datanavigator::Navigator` - * @see `std::stack` To manage data with stack semantics. - */ - class DataVisitor - { - public: - - // Define types to ease writing code in this and derived classes. - - using DataNavigator = data::Variant; - - using DictDataNavigator = data::Dict; - using ListDataNavigator = data::List; - - using BoolDataNavigator = data::Bool; - using DoubleDataNavigator = data::Double; - using FloatDataNavigator = data::Float; - using IntDataNavigator = data::Int; - using LongDataNavigator = data::Long; - using NDArrayDataNavigator = data::NDArray; - using StringDataNavigator = data::String; - - - public: - - DataVisitor(); - virtual ~DataVisitor(); - - - bool applyTo(data::dto::GenericDataPtr& aronData); - bool applyTo(DataNavigator& navigator); - bool applyTo(const std::string& key, DataNavigator& navigator); - - - - virtual bool visitEnter(DictDataNavigator& dict) - { - (void) dict; - return true; - } - virtual bool visitExit(DictDataNavigator& dict) - { - (void) dict; - return true; - } - virtual bool visitEnter(ListDataNavigator& list) - { - (void) list; - return true; - } - virtual bool visitExit(ListDataNavigator& list) - { - (void) list; - return true; - } - - virtual bool visit(BoolDataNavigator& b) - { - (void) b; - return true; - } - virtual bool visit(DoubleDataNavigator& d) - { - (void) d; - return true; - } - virtual bool visit(FloatDataNavigator& f) - { - (void) f; - return true; - } - virtual bool visit(IntDataNavigator& i) - { - (void) i; - return true; - } - virtual bool visit(LongDataNavigator& l) - { - (void) l; - return true; - } - virtual bool visit(NDArrayDataNavigator& array) - { - (void) array; - return true; - } - virtual bool visit(StringDataNavigator& string) - { - (void) string; - return true; - } - - - virtual bool visitEnter(const std::string& key, DictDataNavigator& dict) - { - (void) key; - return visitEnter(dict); - } - virtual bool visitExit(const std::string& key, DictDataNavigator& dict) - { - (void) key; - return visitExit(dict); - } - virtual bool visitEnter(const std::string& key, ListDataNavigator& list) - { - (void) key; - return visitEnter(list); - } - virtual bool visitExit(const std::string& key, ListDataNavigator& list) - { - (void) key; - return visitExit(list); - } - - virtual bool visit(const std::string& key, BoolDataNavigator& b) - { - (void) key; - return visit(b); - } - virtual bool visit(const std::string& key, DoubleDataNavigator& d) - { - (void) key; - return visit(d); - } - virtual bool visit(const std::string& key, FloatDataNavigator& f) - { - (void) key; - return visit(f); - } - virtual bool visit(const std::string& key, IntDataNavigator& i) - { - (void) key; - return visit(i); - } - virtual bool visit(const std::string& key, LongDataNavigator& l) - { - (void) key; - return visit(l); - } - virtual bool visit(const std::string& key, NDArrayDataNavigator& array) - { - (void) key; - return visit(array); - } - virtual bool visit(const std::string& key, StringDataNavigator& string) - { - (void) key; - return visit(string); - } - - - private: - - bool applyToChildren(DictDataNavigator& navigator); - bool applyToChildren(ListDataNavigator& navigator); - - }; - -} - - -/* Copy-and-paste example below. - * Remove functions you don't need. - * Add `const std::string& key, ` to parameter list if you need an items's key - * in the parent container. - */ - -#if 0 - -struct MyDerivedAronDataVisitor : public armarx::aron::visitor::AronDataVisitor -{ - - bool visitEnter(DictDataNavigator& dict) override - { - (void) dict; - return true; - } - bool visitExit(DictDataNavigator& dict) override - { - (void) dict; - return true; - } - bool visitEnter(ListDataNavigator& list) override - { - (void) list; - return true; - } - bool visitExit(ListDataNavigator& list) override - { - (void) list; - return true; - } - - bool visit(BoolDataNavigator& b) override - { - (void) b; - return true; - } - bool visit(DoubleDataNavigator& d) override - { - (void) d; - return true; - } - bool visit(FloatDataNavigator& f) override - { - (void) f; - return true; - } - bool visit(IntDataNavigator& i) override - { - (void) i; - return true; - } - bool visit(LongDataNavigator& l) override - { - (void) l; - return true; - } - bool visit(NDArrayDataNavigator& array) override - { - (void) array; - return true; - } - bool visit(StringDataNavigator& string) override - { - (void) string; - return true; - } - -}; - -#endif diff --git a/source/RobotAPI/libraries/aron/core/legacy/Randomizer.h b/source/RobotAPI/libraries/aron/core/legacy/Randomizer.h deleted file mode 100644 index 3659dee40..000000000 --- a/source/RobotAPI/libraries/aron/core/legacy/Randomizer.h +++ /dev/null @@ -1,631 +0,0 @@ -/* - * This file is part of ArmarX. - * - * Copyright (C) 2012-2016, High Performance Humanoid Technologies (H2T), - * Karlsruhe Institute of Technology (KIT), all rights reserved. - * - * ArmarX is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License version 2 as - * published by the Free Software Foundation. - * - * ArmarX is distributed in the hope that it will be useful, but - * WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see <http://www.gnu.org/licenses/>. - * - * @author Fabian Peller-Konrad (fabian dot peller-konrad at kit dot edu) - * @copyright http://www.gnu.org/licenses/gpl-2.0.txt - * GNU General Public License - */ - -#pragma once - -// STD/STL -#include <map> -#include <memory> -#include <numeric> -#include <set> - -// ArmarX -#include <RobotAPI/libraries/aron/core/Exception.h> -#include <RobotAPI/libraries/aron/core/data/variant/All.h> -#include <RobotAPI/libraries/aron/core/type/variant/All.h> - -#include <RobotAPI/libraries/aron/core/type/visitor/variant/VariantVisitor.h> -#include <RobotAPI/libraries/aron/core/data/visitor/variant/VariantVisitor.h> - -#include <RobotAPI/libraries/aron/converter/json/NLohmannJSONConverter.h> - -namespace armarx::aron -{ - namespace type::matrix - { - const std::vector<type::matrix::ElementType> AllTypes = { - type::matrix::ElementType::int16, - type::matrix::ElementType::int32, - type::matrix::ElementType::int64, - type::matrix::ElementType::float32, - type::matrix::ElementType::float64 - }; - } - - namespace type::quaternion - { - const std::vector<type::quaternion::ElementType> AllTypes = { - type::quaternion::float32, - type::quaternion::float64 - }; - } - - namespace type::image - { - const std::vector<type::image::PixelType> AllTypes = { - type::image::PixelType::rgb24, - type::image::PixelType::depth32 - }; - } - - namespace type::pointcloud - { - const std::vector<type::pointcloud::VoxelType> AllTypes = { - type::pointcloud::VoxelType::PointXYZ, - type::pointcloud::VoxelType::PointXYZHSV, - type::pointcloud::VoxelType::PointXYZI, - type::pointcloud::VoxelType::PointXYZL, - type::pointcloud::VoxelType::PointXYZRGB, - type::pointcloud::VoxelType::PointXYZRGBA, - type::pointcloud::VoxelType::PointXYZRGBL - }; - } - - namespace util - { - // generate i in [min, max) - int generateRandom(int max, int min) - { - if (max < min) - { - throw error::AronException(__PRETTY_FUNCTION__, "The max value "+std::to_string(max)+" is lower than the min value "+std::to_string(min)); - } - int random = (std::rand() % (max - min)) + min; - return random; - } - - template <class T> - T getRandomElement(const std::vector<T>& vec) - { - int i = generateRandom(vec.size(), 0); - return vec.at(i); - } - - template <class ValueT> - std::string getRandomKey(const std::map<std::string, ValueT>& m) - { - std::vector<std::string> keys; - for (const auto [k, _] : m) - { - keys.push_back(k); - } - return getRandomElement(keys); - } - - std::string getRandomKey(const std::set<std::string>& set) - { - std::vector<std::string> keys; - for (const auto& k : set) - { - keys.push_back(k); - } - return getRandomElement(keys); - } - - bool fiftyPercentChance() - { - return generateRandom(2, 0); - } - - std::string generateRandomWord(const std::set<std::string>& usedKeys = {}) - { - // https://randomwordgenerator.com/ - // script to convert random words into string: - // jQuery("#result li i").remove(); var str = ""; jQuery("#result li").each(function() {str += jQuery(this).html() + ", " }); console.log(str); - const std::vector<std::string> words = - { - "jaw", "river", "bow", "profession", "heat", "interference", "slave", "population", "deport", "redeem", "digress", "penny", "cousin", "beef", "Bible", "fuss", - "urgency", "tasty", "innovation", "upset", "gold", "day", "remunerate", "strain", "district", "panel", "choke", "rack", "parameter", "despair", "extort", "country", - "hesitate", "record", "brand", "confusion", "discreet", "accept", "lifestyle", "option", "corn", "charity", "miss", "viable", "glance", "norm", "meet", "bird", - "ribbon", "guideline" - }; - - int i = generateRandom(words.size(), 0); - std::string key = words.at(i); - - while (usedKeys.count(key) > 0) - { - key = generateRandomWord(usedKeys); - } - - return key; - } - - std::vector<unsigned char> generateRandomBlob(unsigned int size) - { - std::vector<unsigned char> new_blob(size, 0); - for (unsigned int i = 0; i < size; ++i) - { - new_blob[i] = (generateRandom(128, 0)); - } - return new_blob; - } - - struct RandomTypeGenerator : public type::Visitor<const type::Descriptor> - { - type::VariantPtr type; - - static type::VariantPtr GenerateRandomType(bool can_be_maybe = true, bool must_be_object = false) - { - RandomTypeGenerator nt; - if (must_be_object) - { - type::visit(nt, type::Descriptor::eObject); - } - else - { - type::visit(nt, util::getRandomElement(type::AllDescriptors)); - } - - if (can_be_maybe) - { - type::Maybe nextMaybeType = util::getRandomElement(type::AllMaybeTypes); - nt.type->setMaybe(nextMaybeType); - } - return nt.type; - } - - virtual type::Descriptor getDescriptor(Input& t) override { return t; } - virtual void visitObject(Input&) override - { - std::string objectName = util::generateRandomWord(); - - int members = util::generateRandom(4, 2); - std::set<std::string> usedKeys = {objectName}; - std::map<std::string, type::VariantPtr> elements; - for (int i = 0; i < members; ++i) - { - std::string key = util::generateRandomWord(usedKeys); - usedKeys.insert(key); - elements.insert({key, GenerateRandomType()}); - } - type = std::make_shared<type::Object>(objectName, elements); - } - virtual void visitDict(Input&) override { type = std::make_shared<type::Dict>(GenerateRandomType()); } - virtual void visitPair(Input&) override { type = std::make_shared<type::Pair>(GenerateRandomType(), GenerateRandomType()); } - virtual void visitTuple(Input&) override - { - int members = util::generateRandom(4, 2); - std::vector<type::VariantPtr> acceptedTypes; - for (int i = 0; i < members; ++i) - { - acceptedTypes.push_back(GenerateRandomType()); - } - - type = std::make_shared<type::Tuple>(acceptedTypes); - } - virtual void visitList(Input&) override { type = std::make_shared<type::List>(GenerateRandomType()); } - virtual void visitMatrix(Input&) override - { - auto x = std::make_shared<type::Matrix>(); - auto t = util::getRandomElement(type::matrix::AllTypes); - x->setElementType(t); - x->setRows(util::generateRandom(10, 1)); - x->setRows(util::generateRandom(10, 1)); - type = x; - } - virtual void visitNDArray(Input& t) override { visitMatrix(t); } - virtual void visitQuaternion(Input&) override - { - auto x = std::make_shared<type::Quaternion>(); - auto t = util::getRandomElement(type::quaternion::AllTypes); - x->setElementType(t); - type = x; - } - virtual void visitOrientation(Input&) override { type = std::make_shared<type::Orientation>(); } - virtual void visitPosition(Input&) override { type = std::make_shared<type::Position>(); } - virtual void visitPose(Input&) override { type = std::make_shared<type::Pose>(); } - virtual void visitImage(Input&) override - { - auto t = std::make_shared<type::Image>(); - auto x = util::getRandomElement(type::image::AllTypes); - t->setPixelType(x); - type = t; - } - virtual void visitPointCloud(Input&) override - { - auto t = std::make_shared<type::PointCloud>(); - auto x = util::getRandomElement(type::pointcloud::AllTypes); - t->setVoxelType(x); - type = t; - } - virtual void visitIntEnum(Input&) override - { - std::string intEnumName = util::generateRandomWord(); - - std::set<std::string> usedKeys = {intEnumName}; - std::map<std::string, int> acceptedValues; - for (int i = 0; i < util::generateRandom(5, 2); ++i) - { - std::string key = util::generateRandomWord(usedKeys); - usedKeys.insert(key); - - acceptedValues.insert({key, i}); - } - type = std::make_shared<type::IntEnum>(intEnumName, acceptedValues); - } - virtual void visitInt(Input&) override { type = std::make_shared<type::Int>(); } - virtual void visitLong(Input&) override { type = std::make_shared<type::Long>(); } - virtual void visitFloat(Input&) override { type = std::make_shared<type::Float>(); } - virtual void visitDouble(Input&) override { type = std::make_shared<type::Double>(); } - virtual void visitBool(Input&) override { type = std::make_shared<type::Bool>(); } - virtual void visitString(Input&) override { type = std::make_shared<type::String>(); } - virtual void visitDateTime(Input&) override { type = std::make_shared<type::DateTime>(); } - virtual void visitUnknown(Input&) override { type = GenerateRandomType(); } - }; - - struct EmptyDataFromTypeGenerator : public type::Visitor<const type::Descriptor> - { - type::VariantPtr type; - data::VariantPtr data; - - static data::VariantPtr GenerateRandomFromType(const type::VariantPtr& t) - { - EmptyDataFromTypeGenerator nt; - nt.type = t; - type::visit(nt, util::getRandomElement(type::AllDescriptors)); - return nt.data; - } - - virtual type::Descriptor getDescriptor(Input& t) override { return t; } - virtual void visitObject(Input&) override - { - auto da = std::make_shared<data::Dict>(); - - type::ObjectPtr t = type::Object::DynamicCastAndCheck(type); - auto d = std::make_shared<data::Dict>(); - for (const auto& [k, tt] : t->getMemberTypes()) - { - d->addElement(k, GenerateRandomFromType(tt)); - } - data = da; - } - virtual void visitDict(Input&) override { data = std::make_shared<data::Dict>(); } - virtual void visitPair(Input&) override { data = std::make_shared<data::List>(); } - virtual void visitTuple(Input&) override { data = std::make_shared<data::List>(); } - virtual void visitList(Input&) override { data = std::make_shared<data::List>(); } - virtual void visitMatrix(Input&) override { data = std::make_shared<data::NDArray>(); } - virtual void visitNDArray(Input& t) override { data = std::make_shared<data::NDArray>(); } - virtual void visitQuaternion(Input&) override { data = std::make_shared<data::NDArray>(); } - virtual void visitOrientation(Input&) override { data = std::make_shared<data::NDArray>(); } - virtual void visitPosition(Input&) override { data = std::make_shared<data::NDArray>(); } - virtual void visitPose(Input&) override { data = std::make_shared<data::NDArray>(); } - virtual void visitImage(Input&) override { data = std::make_shared<data::NDArray>(); } - virtual void visitPointCloud(Input&) override { data = std::make_shared<data::NDArray>(); } - virtual void visitIntEnum(Input&) override { data = std::make_shared<data::Int>(); } - virtual void visitInt(Input&) override { data = std::make_shared<data::Int>(); } - virtual void visitLong(Input&) override { data = std::make_shared<data::Long>(); } - virtual void visitFloat(Input&) override { data = std::make_shared<data::Float>(); } - virtual void visitDouble(Input&) override { data = std::make_shared<data::Double>(); } - virtual void visitBool(Input&) override { data = std::make_shared<data::Bool>(); } - virtual void visitString(Input&) override { data = std::make_shared<data::String>(); } - virtual void visitDateTime(Input&) override { data = std::make_shared<data::Long>(); } - virtual void visitUnknown(Input&) override { data = GenerateRandomFromType(type); } - }; - } - - class Randomizer - { - public: - Randomizer() - { - std::srand(std::time(nullptr)); - }; - - type::VariantPtr generateRandomObjectType() const - { - return util::RandomTypeGenerator::GenerateRandomType(false, true); - } - - data::VariantPtr generateEmptyAronDataFromType(const type::VariantPtr& type, bool ignore_maybe = false) const - { - if (type->getMaybe() != type::Maybe::eNone && !ignore_maybe) - { - if (util::fiftyPercentChance()) - { - return nullptr; - } - } - - auto data = util::EmptyDataFromTypeGenerator::GenerateRandomFromType(type); - return data; - } - - void initializeRandomly(data::VariantPtr& data, const type::VariantPtr& type) const - { - data = generateEmptyAronDataFromType(type); - if (!data) - { - if (type->getMaybe() == type::Maybe::eNone) - { - throw error::AronException(__PRETTY_FUNCTION__, "The data is null but the type is not a maybe type. This is not valid."); - } - return; - } - - // Containers - type::Descriptor desc = type->getDescriptor(); - switch (desc) - { - case type::Descriptor::eObject: - { - auto t = type::Object::DynamicCastAndCheck(type); - auto d = data::Dict::DynamicCastAndCheck(data); - initializeRandomly(d, *t); - break; - } - case type::Descriptor::eList: - { - auto t = type::List::DynamicCastAndCheck(type); - auto d = data::List::DynamicCastAndCheck(data); - initializeRandomly(d, *t); - break; - } - case type::Descriptor::eDict: - { - auto t = type::Dict::DynamicCastAndCheck(type); - auto d = data::Dict::DynamicCastAndCheck(data); - initializeRandomly(d, *t); - break; - } - case type::Descriptor::eTuple: - { - auto t = type::Tuple::DynamicCastAndCheck(type); - auto d = data::List::DynamicCastAndCheck(data); - initializeRandomly(d, *t); - break; - } - case type::Descriptor::ePair: - { - auto t = type::Pair::DynamicCastAndCheck(type); - auto d = data::List::DynamicCastAndCheck(data); - initializeRandomly(d, *t); - break; - } - case type::Descriptor::eIntEnum: - { - auto t = type::IntEnum::DynamicCastAndCheck(type); - auto d = data::Int::DynamicCastAndCheck(data); - initializeRandomly(d, *t); - break; - } - case type::Descriptor::eMatrix: - { - auto t = type::Matrix::DynamicCastAndCheck(type); - auto d = data::NDArray::DynamicCastAndCheck(data); - initializeRandomly(d, *t); - break; - } - case type::Descriptor::eNDArray: - { - auto t = type::NDArray::DynamicCastAndCheck(type); - auto d = data::NDArray::DynamicCastAndCheck(data); - initializeRandomly(d, *t); - break; - } - case type::Descriptor::eOrientation: - { - auto t = type::Orientation::DynamicCastAndCheck(type); - auto d = data::NDArray::DynamicCastAndCheck(data); - initializeRandomly(d, *t); - break; - } - case type::Descriptor::eQuaternion: - { - auto t = type::Quaternion::DynamicCastAndCheck(type); - auto d = data::NDArray::DynamicCastAndCheck(data); - initializeRandomly(d, *t); - break; - } - case type::Descriptor::eImage: - { - auto t = type::Image::DynamicCastAndCheck(type); - auto d = data::NDArray::DynamicCastAndCheck(data); - initializeRandomly(d, *t); - break; - } - case type::Descriptor::ePointCloud: - { - auto t = type::PointCloud::DynamicCastAndCheck(type); - auto d = data::NDArray::DynamicCastAndCheck(data); - initializeRandomly(d, *t); - break; - } - case type::Descriptor::ePosition: - { - auto t = type::Position::DynamicCastAndCheck(type); - auto d = data::NDArray::DynamicCastAndCheck(data); - initializeRandomly(d, *t); - break; - } - case type::Descriptor::ePose: - { - auto t = type::Pose::DynamicCastAndCheck(type); - auto d = data::NDArray::DynamicCastAndCheck(data); - initializeRandomly(d, *t); - break; - } - case type::Descriptor::eInt: - { - auto t = type::Int::DynamicCastAndCheck(type); - auto d = data::Int::DynamicCastAndCheck(data); - initializeRandomly(d, *t); - break; - } - case type::Descriptor::eLong: - { - auto t = type::Long::DynamicCastAndCheck(type); - auto d = data::Long::DynamicCastAndCheck(data); - initializeRandomly(d, *t); - break; - } - case type::Descriptor::eFloat: - { - auto t = type::Float::DynamicCastAndCheck(type); - auto d = data::Float::DynamicCastAndCheck(data); - initializeRandomly(d, *t); - break; - } - case type::Descriptor::eDouble: - { - auto t = type::Double::DynamicCastAndCheck(type); - auto d = data::Double::DynamicCastAndCheck(data); - initializeRandomly(d, *t); - break; - } - case type::Descriptor::eString: - { - auto t = type::String::DynamicCastAndCheck(type); - auto d = data::String::DynamicCastAndCheck(data); - initializeRandomly(d, *t); - break; - } - case type::Descriptor::eBool: - { - auto t = type::Bool::DynamicCastAndCheck(type); - auto d = data::Bool::DynamicCastAndCheck(data); - initializeRandomly(d, *t); - break; - } - case type::Descriptor::eTime: - { - auto t = type::DateTime::DynamicCastAndCheck(type); - auto d = data::Long::DynamicCastAndCheck(data); - initializeRandomly(d, *t); - break; - } - case type::Descriptor::eUnknown: - { - throw error::AronException(__PRETTY_FUNCTION__, "No valid type found!"); - } - } - - } - - void initializeRandomly(data::DictPtr& data, const type::Object& type) const - { - for (auto& [key, nextData] : data->getElements()) - { - initializeRandomly(nextData, type.getMemberTypes()[key]); - data->removeElement(key); - data->addElement(key, nextData); - } - } - - void initializeRandomly(data::DictPtr& data, const type::Dict& type) const - { - data->clear(); - int numElements = util::generateRandom(5, 1); - std::set<std::string> usedKeys; - for (int i = 0; i < numElements; ++i) - { - std::string key = util::generateRandomWord(usedKeys); - usedKeys.insert(key); - data::VariantPtr newData = generateEmptyAronDataFromType(type.getAcceptedType()); - initializeRandomly(newData, type.getAcceptedType()); - data->addElement(key, newData); - } - } - - void initializeRandomly(data::ListPtr& data, const type::Tuple& type) const - { - std::vector<data::VariantPtr> newElements; - - unsigned int i = 0; - for (auto& nextData : data->getElements()) - { - initializeRandomly(nextData, type.getAcceptedType(i++)); - newElements.push_back(nextData); - } - - data->clear(); - for (const auto& el : newElements) - { - data->addElement(el); - } - } - - void initializeRandomly(data::ListPtr& data, const type::Pair& type) const - { - data::VariantPtr first = data->getElement(0); - data::VariantPtr second = data->getElement(1); - initializeRandomly(first, type.getFirstAcceptedType()); - initializeRandomly(second, type.getSecondAcceptedType()); - - data->clear(); - data->addElement(first); - data->addElement(second); - } - - void initializeRandomly(data::ListPtr& data, const type::List& type) const - { - data->clear(); - int numElements = util::generateRandom(5, 1); - for (int i = 0; i < numElements; ++i) - { - data::VariantPtr newData = generateEmptyAronDataFromType(type.getAcceptedType()); - initializeRandomly(newData, type.getAcceptedType()); - data->addElement(newData); - } - } - - void initializeRandomly(data::NDArrayPtr& data, const type::Variant& type) const - { - std::vector<int> dims = data->getShape(); - int bytes = std::accumulate(std::begin(dims), std::end(dims), 1, std::multiplies<int>()); - std::vector<unsigned char> blob = util::generateRandomBlob(bytes); - data->setData(bytes, blob.data()); - } - - void initializeRandomly(data::IntPtr& data, const type::Variant& type) const - { - data->setValue(util::generateRandom(1000, -1000)); - } - - void initializeRandomly(data::LongPtr& data, const type::Variant& type) const - { - data->setValue(util::generateRandom(1000, -1000)); - } - - void initializeRandomly(data::FloatPtr& data, const type::Variant& type) const - { - data->setValue(util::generateRandom(1000, -1000)); - } - - void initializeRandomly(data::DoublePtr& data, const type::Variant& type) const - { - data->setValue(util::generateRandom(1000, -1000)); - } - - void initializeRandomly(data::BoolPtr& data, const type::Variant& type) const - { - data->setValue(util::fiftyPercentChance()); - } - - void initializeRandomly(data::StringPtr& data, const type::Variant& type) const - { - data->setValue(util::generateRandomWord()); - } - }; -} - diff --git a/source/RobotAPI/libraries/aron/core/legacy/TypedDataVisitor.cpp b/source/RobotAPI/libraries/aron/core/legacy/TypedDataVisitor.cpp deleted file mode 100644 index cb129561e..000000000 --- a/source/RobotAPI/libraries/aron/core/legacy/TypedDataVisitor.cpp +++ /dev/null @@ -1,258 +0,0 @@ -#include "TypedDataVisitor.h" - -#include <SimoxUtility/meta/type_name.h> - -#include <ArmarXCore/core/exceptions/local/ExpressionException.h> - - -namespace armarx::aron::visitor -{ - - - TypedDataVisitor::TypedDataVisitor() - { - } - - TypedDataVisitor::~TypedDataVisitor() - { - } - - bool TypedDataVisitor::applyTo(TypeNavigator& type, DataNavigator& data) - { - return this->applyTo("", type, data); - } - - template <class DataT, class TypeT> - bool TypedDataVisitor::applyToCollection(TypeT& type, const std::string& key, DataNavigator& data) - { - DataT& dataCast = dynamic_cast<DataT&>(data); - if (!visitEnter(type, key, dataCast)) - { - return false; - } - if (!applyToChildren(type, dataCast)) - { - return false; - } - if (!visitExit(type, key, dataCast)) - { - return false; - } - return true; - } - - template <class ToT, class FromT> - ToT cast(const FromT& from) - { - ToT to; - to.setValue(from.getValue()); - return to; - } - template <class FromDataT> - std::optional<data::Long> castToLong(const FromDataT& data) - { - if (auto d = dynamic_cast<const data::Int*>(&data)) - { - return cast<data::Long>(*d); - } - return std::nullopt; - } - template <class FromDataT> - std::optional<data::Int> castToInt(const FromDataT& data) - { - if (auto d = dynamic_cast<const data::Long*>(&data)) - { - return cast<data::Int>(*d); - } - return std::nullopt; - } - - - bool TypedDataVisitor::applyTo(const std::string& key, TypeNavigator& type, DataNavigator& data) - { - if (auto t = dynamic_cast<ObjectTypeNavigator*>(&type)) - { - return applyToCollection<DictDataNavigator>(*t, key, data); - } - else if (auto t = dynamic_cast<DictTypeNavigator*>(&type)) - { - return applyToCollection<DictDataNavigator>(*t, key, data); - } - else if (auto t = dynamic_cast<ListTypeNavigator*>(&type)) - { - return applyToCollection<ListDataNavigator>(*t, key, data); - } - else if (auto t = dynamic_cast<TupleTypeNavigator*>(&type)) - { - return applyToCollection<ListDataNavigator>(*t, key, data); - } - - ARMARX_CHECK_EQUAL(type.childrenSize(), 0) << simox::meta::get_type_name(type); - ARMARX_CHECK_EQUAL(data.childrenSize(), 0) << simox::meta::get_type_name(data); - - try - { - - if (auto t = dynamic_cast<BoolTypeNavigator*>(&type)) - { - return visit(*t, key, dynamic_cast<BoolDataNavigator&>(data)); - } - else if (auto t = dynamic_cast<DoubleTypeNavigator*>(&type)) - { - return visit(*t, key, dynamic_cast<DoubleDataNavigator&>(data)); - } - else if (auto t = dynamic_cast<FloatTypeNavigator*>(&type)) - { - return visit(*t, key, dynamic_cast<FloatDataNavigator&>(data)); - } - else if (auto t = dynamic_cast<IntTypeNavigator*>(&type)) - { - if (auto cast = castToInt(data)) - { - return visit(*t, key, cast.value()); - } - else - { - return visit(*t, key, dynamic_cast<IntDataNavigator&>(data)); - } - } - else if (auto t = dynamic_cast<LongTypeNavigator*>(&type)) - { - if (auto cast = castToLong(data)) - { - return visit(*t, key, cast.value()); - } - else - { - return visit(*t, key, dynamic_cast<LongDataNavigator&>(data)); - } - } - else if (auto t = dynamic_cast<StringTypeNavigator*>(&type)) - { - return visit(*t, key, dynamic_cast<StringDataNavigator&>(data)); - } - else if (auto t = dynamic_cast<TimeTypeNavigator*>(&type)) - { - if (auto cast = castToLong(data)) - { - return visit(*t, key, cast.value()); - } - else - { - return visit(*t, key, dynamic_cast<LongDataNavigator&>(data)); - } - } - - if (auto t = dynamic_cast<PCLPointCloudTypeNavigator*>(&type)) - { - return visit(*t, key, dynamic_cast<NDArrayDataNavigator&>(data)); - } - else if (auto t = dynamic_cast<EigenMatrixTypeNavigator*>(&type)) - { - return visit(*t, key, dynamic_cast<NDArrayDataNavigator&>(data)); - } - else if (auto t = dynamic_cast<EigenQuaternionTypeNavigator*>(&type)) - { - return visit(*t, key, dynamic_cast<NDArrayDataNavigator&>(data)); - } - else if (auto t = dynamic_cast<ImageNavigator*>(&type)) - { - return visit(*t, key, dynamic_cast<NDArrayDataNavigator&>(data)); - } - else if (auto t = dynamic_cast<PoseTypeNavigator*>(&type)) - { - return visit(*t, key, dynamic_cast<NDArrayDataNavigator&>(data)); - } - else if (auto t = dynamic_cast<PositionTypeNavigator*>(&type)) - { - return visit(*t, key, dynamic_cast<NDArrayDataNavigator&>(data)); - } - else if (auto t = dynamic_cast<OrientationTypeNavigator*>(&type)) - { - return visit(*t, key, dynamic_cast<NDArrayDataNavigator&>(data)); - } - - ARMARX_CHECK(false) << "Unhandled AronTypeNavigatorType '" << simox::meta::get_type_name(type) << "'." - << "\n(Data: '" << simox::meta::get_type_name(data) << "')"; - } - catch (const std::bad_cast& e) - { - std::stringstream msg; - msg << "Got ARON data '" << simox::meta::get_type_name(data) << "'" - << " incompatible to ARON type '" << simox::meta::get_type_name(type) << "'" - << " (got std::bad_cast: '" << e.what() << "')."; - throw error::AronException(__PRETTY_FUNCTION__, msg.str()); - } - } - - bool TypedDataVisitor::applyToChildren(ObjectTypeNavigator& type, DictDataNavigator& data) - { - for (const std::string& key : type.getAllKeys()) - { - TypeNavigator::PointerType childType = type.getMemberType(key); - DataNavigator::PointerType childData = data.getElement(key); - if (childType && childData) - { - if (!applyTo(key, *childType, *childData)) - { - return false; - } - } - } - return true; - } - - bool TypedDataVisitor::applyToChildren(DictTypeNavigator& type, DictDataNavigator& data) - { - TypeNavigator::PointerType childType = type.getAcceptedType(); - for (const std::string& key : data.getAllKeys()) - { - DataNavigator::PointerType childData = data.getElement(key); - if (childType && childData) - { - if (!applyTo(key, *childType, *childData)) - { - return false; - } - } - } - return true; - } - - bool TypedDataVisitor::applyToChildren(ListTypeNavigator& type, ListDataNavigator& data) - { - TypeNavigator::PointerType childType = type.getAcceptedType(); - size_t i = 0; - for (const DataNavigator::PointerType& childData : data.getElements()) - { - if (childType && childData) - { - if (!applyTo(std::to_string(i), *childType, *childData)) - { - return false; - } - } - ++i; - } - return true; - } - - bool TypedDataVisitor::applyToChildren(TupleTypeNavigator& type, ListDataNavigator& data) - { - unsigned int i = 0; - for (const TypeNavigator::PointerType& childType : type.getAcceptedTypes()) - { - DataNavigator::PointerType childData = data.getElement(i); - if (childType && childData) - { - if (!applyTo(std::to_string(i), *childType, *childData)) - { - return false; - } - } - ++i; - } - return true; - } - -} diff --git a/source/RobotAPI/libraries/aron/core/legacy/TypedDataVisitor.h b/source/RobotAPI/libraries/aron/core/legacy/TypedDataVisitor.h deleted file mode 100644 index 5a41647d3..000000000 --- a/source/RobotAPI/libraries/aron/core/legacy/TypedDataVisitor.h +++ /dev/null @@ -1,379 +0,0 @@ -#pragma once - -#include <RobotAPI/libraries/aron/core/data/variant/All.h> -#include <RobotAPI/libraries/aron/core/type/variant/All.h> - - -namespace armarx::aron::visitor -{ - - /** - * @brief A visitor traversing an `aron::type::dto::GenericTypePtr` using - * `aron::Typenavigator::Navigator`s, taking care of type checking, - * casting and hierarchical traversal. - * - * To use it, create a class deriving from `AronTypeVisitor` and - * override the overloads of `visitEnter()`, `visitExit()` and `visit()` - * for the types you would like to handle (see blow for a copy-and-paste - * example). - * Then, instantiate your derived visitor and call `applyTo()`, passing - * the `AronTypePtr` or the root `Navigator`. - * - * For dicts and lists, you will get a `visitEnter()`/`visitExit()` pair. - * For types without children (e.g. primitive types), you get a single - * `visit()` call. - * - * Each visit function should return true to continue traversal or - * false to stop it. All default implementations return true. - * - * To the the location of the passed navigator in the original `AronType`, - * use `navigator.getPath()`. - * - * @see `aron::type::dto::GenericTypePtr` - * @see `aron::Typenavigator::Navigator` - * @see `std::stack` To manage Type with stack semantics. - */ - class TypedDataVisitor - { - public: - - // Define types to ease writing code in this and derived classes. - - // Data - possible data representations - using DataNavigator = data::Variant; - - using DictDataNavigator = data::Dict; - using ListDataNavigator = data::List; - - using BoolDataNavigator = data::Bool; - using DoubleDataNavigator = data::Double; - using FloatDataNavigator = data::Float; - using IntDataNavigator = data::Int; - using LongDataNavigator = data::Long; - using StringDataNavigator = data::String; - - using NDArrayDataNavigator = data::NDArray; - - - // Type - using TypeNavigator = type::Variant; - - // Dict-valued - using DictTypeNavigator = type::Dict; - using ObjectTypeNavigator = type::Object; - - // List-valued - using ListTypeNavigator = type::List; - using TupleTypeNavigator = type::Tuple; - - // Primitive-valued - using BoolTypeNavigator = type::Bool; - using DoubleTypeNavigator = type::Double; - using FloatTypeNavigator = type::Float; - using IntTypeNavigator = type::Int; - using LongTypeNavigator = type::Long; - using StringTypeNavigator = type::String; - using TimeTypeNavigator = type::DateTime; - - - // Array-valued - using EigenMatrixTypeNavigator = type::Matrix; - using EigenQuaternionTypeNavigator = type::Quaternion; - using ImageNavigator = type::Image; - using PCLPointCloudTypeNavigator = type::PointCloud; - using PoseTypeNavigator = type::Pose; - using PositionTypeNavigator = type::Position; - using OrientationTypeNavigator = type::Orientation; - - - public: - - TypedDataVisitor(); - virtual ~TypedDataVisitor(); - - - bool applyTo(TypeNavigator& type, DataNavigator& data); - bool applyTo(const std::string& key, TypeNavigator& type, DataNavigator& data); - - - virtual bool visitEnter(DictTypeNavigator& type, DictDataNavigator& data) - { - (void) type, (void) data; - return true; - } - virtual bool visitExit(DictTypeNavigator& type, DictDataNavigator& data) - { - (void) type, (void) data; - return true; - } - - virtual bool visitEnter(ObjectTypeNavigator& type, DictDataNavigator& data) - { - (void) type, (void) data; - return true; - } - virtual bool visitExit(ObjectTypeNavigator& type, DictDataNavigator& data) - { - (void) type, (void) data; - return true; - } - - virtual bool visitEnter(ListTypeNavigator& type, ListDataNavigator& data) - { - (void) type, (void) data; - return true; - } - virtual bool visitExit(ListTypeNavigator& type, ListDataNavigator& data) - { - (void) type, (void) data; - return true; - } - - virtual bool visitEnter(TupleTypeNavigator& type, ListDataNavigator& data) - { - (void) type, (void) data; - return true; - } - virtual bool visitExit(TupleTypeNavigator& type, ListDataNavigator& data) - { - (void) type, (void) data; - return true; - } - - - virtual bool visit(BoolTypeNavigator& type, BoolDataNavigator& data) - { - (void) type, (void) data; - return true; - } - virtual bool visit(DoubleTypeNavigator& type, DoubleDataNavigator& data) - { - (void) type, (void) data; - return true; - } - virtual bool visit(FloatTypeNavigator& type, FloatDataNavigator& data) - { - (void) type, (void) data; - return true; - } - virtual bool visit(IntTypeNavigator& type, IntDataNavigator& data) - { - (void) type, (void) data; - return true; - } - virtual bool visit(LongTypeNavigator& type, LongDataNavigator& data) - { - (void) type, (void) data; - return true; - } - virtual bool visit(StringTypeNavigator& type, StringDataNavigator& data) - { - (void) type, (void) data; - return true; - } - virtual bool visit(TimeTypeNavigator& type, LongDataNavigator& data) - { - return visit(type, IceUtil::Time::microSeconds(data.getValue())); - } - virtual bool visit(TimeTypeNavigator& type, const IceUtil::Time& data) - { - (void) type, (void) data; - return true; - } - - - virtual bool visit(EigenMatrixTypeNavigator& type, NDArrayDataNavigator& data) - { - (void) type, (void) data; - return true; - } - virtual bool visit(EigenQuaternionTypeNavigator& type, NDArrayDataNavigator& data) - { - (void) type, (void) data; - return true; - } - virtual bool visit(ImageNavigator& type, NDArrayDataNavigator& data) - { - (void) type, (void) data; - return true; - } - /*virtual bool visit(IVTCByteImageTypeNavigator& type, NDArrayDataNavigator& data) - { - (void) type, (void) data; - return true; - } - virtual bool visit(OpenCVMatTypeNavigator& type, NDArrayDataNavigator& data) - { - (void) type, (void) data; - return true; - }*/ - virtual bool visit(PCLPointCloudTypeNavigator& type, NDArrayDataNavigator& data) - { - (void) type, (void) data; - return true; - } - virtual bool visit(PoseTypeNavigator& type, NDArrayDataNavigator& data) - { - (void) type, (void) data; - return true; - } - virtual bool visit(PositionTypeNavigator& type, NDArrayDataNavigator& data) - { - (void) type, (void) data; - return true; - } - virtual bool visit(OrientationTypeNavigator& type, NDArrayDataNavigator& data) - { - (void) type, (void) data; - return true; - } - - - - virtual bool visitEnter(DictTypeNavigator& type, const std::string& key, DictDataNavigator& data) - { - (void) key; - return visitEnter(type, data); - } - virtual bool visitExit(DictTypeNavigator& type, const std::string& key, DictDataNavigator& data) - { - (void) key; - return visitExit(type, data); - } - - virtual bool visitEnter(ObjectTypeNavigator& type, const std::string& key, DictDataNavigator& data) - { - (void) key; - return visitEnter(type, data); - } - virtual bool visitExit(ObjectTypeNavigator& type, const std::string& key, DictDataNavigator& data) - { - (void) key; - return visitExit(type, data); - } - - virtual bool visitEnter(ListTypeNavigator& type, const std::string& key, ListDataNavigator& data) - { - (void) key; - return visitEnter(type, data); - } - virtual bool visitExit(ListTypeNavigator& type, const std::string& key, ListDataNavigator& data) - { - (void) key; - return visitExit(type, data); - } - - virtual bool visitEnter(TupleTypeNavigator& type, const std::string& key, ListDataNavigator& data) - { - (void) key; - return visitEnter(type, data); - } - virtual bool visitExit(TupleTypeNavigator& type, const std::string& key, ListDataNavigator& data) - { - (void) key; - return visitExit(type, data); - } - - - virtual bool visit(BoolTypeNavigator& type, const std::string& key, BoolDataNavigator& data) - { - (void) key; - return visit(type, data); - } - virtual bool visit(DoubleTypeNavigator& type, const std::string& key, DoubleDataNavigator& data) - { - (void) key; - return visit(type, data); - } - virtual bool visit(FloatTypeNavigator& type, const std::string& key, FloatDataNavigator& data) - { - (void) key; - return visit(type, data); - } - virtual bool visit(IntTypeNavigator& type, const std::string& key, IntDataNavigator& data) - { - (void) key; - return visit(type, data); - } - virtual bool visit(LongTypeNavigator& type, const std::string& key, LongDataNavigator& data) - { - (void) key; - return visit(type, data); - } - virtual bool visit(StringTypeNavigator& type, const std::string& key, StringDataNavigator& data) - { - (void) key; - return visit(type, data); - } - virtual bool visit(TimeTypeNavigator& type, const std::string& key, LongDataNavigator& data) - { - (void) key; - return visit(type, data); - } - virtual bool visit(TimeTypeNavigator& type, const std::string& key, const IceUtil::Time& data) - { - (void) key; - return visit(type, data); - } - - - virtual bool visit(EigenMatrixTypeNavigator& type, const std::string& key, NDArrayDataNavigator& data) - { - (void) type, (void) key; - return visit(type, data); - } - virtual bool visit(EigenQuaternionTypeNavigator& type, const std::string& key, NDArrayDataNavigator& data) - { - (void) type, (void) key; - return visit(type, data); - } - virtual bool visit(ImageNavigator& type, const std::string& key, NDArrayDataNavigator& data) - { - (void) type, (void) key; - return visit(type, data); - } - /*virtual bool visit(IVTCByteImageTypeNavigator& type, const std::string& key, NDArrayDataNavigator& data) - { - (void) type, (void) key; - return visit(type, data); - } - virtual bool visit(OpenCVMatTypeNavigator& type, const std::string& key, NDArrayDataNavigator& data) - { - (void) type, (void) key; - return visit(type, data); - }*/ - virtual bool visit(PCLPointCloudTypeNavigator& type, const std::string& key, NDArrayDataNavigator& data) - { - (void) type, (void) key; - return visit(type, data); - } - virtual bool visit(PoseTypeNavigator& type, const std::string& key, NDArrayDataNavigator& data) - { - (void) type, (void) key; - return visit(type, data); - } - virtual bool visit(PositionTypeNavigator& type, const std::string& key, NDArrayDataNavigator& data) - { - (void) type, (void) key; - return visit(type, data); - } - virtual bool visit(OrientationTypeNavigator& type, const std::string& key, NDArrayDataNavigator& data) - { - (void) type, (void) key; - return visit(type, data); - } - - - private: - - template <class DataT, class TypeT> - bool applyToCollection(TypeT& type, const std::string& key, DataNavigator& data); - - bool applyToChildren(ObjectTypeNavigator& type, DictDataNavigator& data); - bool applyToChildren(DictTypeNavigator& type, DictDataNavigator& data); - bool applyToChildren(ListTypeNavigator& type, ListDataNavigator& data); - bool applyToChildren(TupleTypeNavigator& type, ListDataNavigator& data); - - }; - -} diff --git a/source/RobotAPI/libraries/aron/core/test/CMakeLists.txt b/source/RobotAPI/libraries/aron/core/test/CMakeLists.txt index 0250dd36e..e69de29bb 100644 --- a/source/RobotAPI/libraries/aron/core/test/CMakeLists.txt +++ b/source/RobotAPI/libraries/aron/core/test/CMakeLists.txt @@ -1,146 +0,0 @@ -find_package(Simox QUIET) -armarx_build_if(Simox_FOUND "Simox not available") - -find_package(Eigen3 QUIET) -armarx_build_if(Eigen3_FOUND "Eigen3 not available") - -find_package(IVT COMPONENTS ivt ivtopencv QUIET) -armarx_build_if(IVT_FOUND "IVT not available") - -find_package(OpenCV QUIET) -armarx_build_if(OpenCV_FOUND "OpenCV not available") - -find_package(PCL QUIET) -armarx_build_if(PCL_FOUND "PCL not available") - -###################### -# ARON OPERATOR TEST # -###################### -armarx_add_test( - TEST_NAME - aronOperatorTest - TEST_FILE - aronOperatorTest.cpp - LIBS - SimoxUtility # Simox::SimoxUtility - ArmarXCore - aron - aroncommon - INCLUDE_DIRECTORIES - ${Simox_INCLUDE_DIR} -) - -###################### -# ARON CODE GEN TEST # -###################### -armarx_add_test( - TEST_NAME - aronCodeGenerationTest - TEST_FILE - aronCodeGenerationTest.cpp - LIBS - SimoxUtility # Simox::SimoxUtility - ArmarXCore - RobotAPI::aron - ARON_FILES - aron/AnyTest.xml - aron/TemplateTest.xml - aron/DictTest.xml - aron/MatrixTest.xml - aron/QuaternionTest.xml - aron/EnumTest.xml - aron/HumanPoseTest.xml - aron/ImageTest.xml - aron/ListTest.xml - aron/NaturalIKTest.xml - aron/ObjectTest.xml - aron/OrientationTest.xml - aron/PointCloudTest.xml - aron/PoseTest.xml - aron/PositionTest.xml - aron/PrimitiveTest.xml - aron/OptionalTest.xml - INCLUDE_DIRECTORIES - ${Simox_INCLUDE_DIR} - ${Eigen3_INCLUDE_DIR} - ${IVT_INCLUDE_DIRS} - ${OpenCV_INCLUDE_DIRS} - ${PCL_INCLUDE_DIRS} -) - -###################### -# ARON NAVIGATE TEST # -###################### -armarx_add_test( - TEST_NAME - aronNavigateTest - TEST_FILE - aronNavigateTest.cpp - LIBS - SimoxUtility # Simox::SimoxUtility - ArmarXCore - RobotAPI::aron - ARON_FILES - aron/NaturalIKTest.xml - INCLUDE_DIRECTORIES - ${Simox_INCLUDE_DIR} -) - -###################### -# ARON EXTENDS TEST # -###################### -armarx_add_test( - TEST_NAME - aronExtendsTest - TEST_FILE - aronExtendsTest.cpp - LIBS - SimoxUtility # Simox::SimoxUtility - ArmarXCore - RobotAPI::aron - ARON_FILES - aron/BaseClassTest.xml - aron/DerivedClassTest.xml - INCLUDE_DIRECTORIES - ${Simox_INCLUDE_DIR} -) - -######################## -# ARON RANDOMIZED TEST # -######################## -armarx_add_test( - TEST_NAME - aronRandomizedTest - TEST_FILE - aronRandomizedTest.cpp - LIBS - SimoxUtility # Simox::SimoxUtility - ArmarXCore - RobotAPI::aron - ivt - ivtopencv - ${PCL_COMMON_LIBRARIES} - aronjsonconverter - ARON_FILES - aron/DictTest.xml - aron/MatrixTest.xml - aron/QuaternionTest.xml - aron/EnumTest.xml - aron/HumanPoseTest.xml - aron/ListTest.xml - aron/NaturalIKTest.xml - aron/ObjectTest.xml - aron/OrientationTest.xml - aron/PointCloudTest.xml - aron/PoseTest.xml - aron/PositionTest.xml - aron/PrimitiveTest.xml - aron/OptionalTest.xml - aron/ImageTest.xml - INCLUDE_DIRECTORIES - ${Simox_INCLUDE_DIR} - ${Eigen3_INCLUDE_DIR} - ${IVT_INCLUDE_DIRS} - ${OpenCV_INCLUDE_DIRS} - ${PCL_INCLUDE_DIRS} -) diff --git a/source/RobotAPI/libraries/aron/core/test/Randomizer.cpp b/source/RobotAPI/libraries/aron/core/test/Randomizer.cpp deleted file mode 100644 index e81ab45e0..000000000 --- a/source/RobotAPI/libraries/aron/core/test/Randomizer.cpp +++ /dev/null @@ -1,24 +0,0 @@ -/* - * This file is part of ArmarX. - * - * Copyright (C) 2012-2016, High Performance Humanoid Technologies (H2T), - * Karlsruhe Institute of Technology (KIT), all rights reserved. - * - * ArmarX is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License version 2 as - * published by the Free Software Foundation. - * - * ArmarX is distributed in the hope that it will be useful, but - * WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see <http://www.gnu.org/licenses/>. - * - * @author Fabian Peller-Konrad (fabian dot peller-konrad at kit dot edu) - * @copyright http://www.gnu.org/licenses/gpl-2.0.txt - * GNU General Public License - */ - -#include "Randomizer.h" diff --git a/source/RobotAPI/libraries/aron/core/test/Randomizer.h b/source/RobotAPI/libraries/aron/core/test/Randomizer.h deleted file mode 100644 index 24e441822..000000000 --- a/source/RobotAPI/libraries/aron/core/test/Randomizer.h +++ /dev/null @@ -1,771 +0,0 @@ -/* - * This file is part of ArmarX. - * - * Copyright (C) 2012-2016, High Performance Humanoid Technologies (H2T), - * Karlsruhe Institute of Technology (KIT), all rights reserved. - * - * ArmarX is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License version 2 as - * published by the Free Software Foundation. - * - * ArmarX is distributed in the hope that it will be useful, but - * WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see <http://www.gnu.org/licenses/>. - * - * @author Fabian Peller-Konrad (fabian dot peller-konrad at kit dot edu) - * @copyright http://www.gnu.org/licenses/gpl-2.0.txt - * GNU General Public License - */ - -#pragma once - -// STD/STL -#include <map> -#include <memory> -#include <numeric> -#include <set> - -// ArmarX -#include <RobotAPI/libraries/aron/core/Exception.h> -#include <RobotAPI/libraries/aron/core/data/variant/All.h> -#include <RobotAPI/libraries/aron/core/type/variant/All.h> - -#include <RobotAPI/libraries/aron/core/type/visitor/Visitor.h> -#include <RobotAPI/libraries/aron/core/data/visitor/Visitor.h> - -#include <RobotAPI/libraries/aron/converter/json/NLohmannJSONConverter.h> - -#include <RobotAPI/libraries/aron/core/codegenerator/codewriter/cpp/generator/All.h> - -namespace armarx::aron -{ - namespace type::matrix - { - std::vector<type::matrix::ElementType> getAllTypes() - { - std::vector<type::matrix::ElementType> ret; - for(const auto& el : aron::codegenerator::cpp::generator::Matrix::ElementType2Cpp) - { - ret.push_back(el.first); - } - return ret; - } - const std::vector<type::matrix::ElementType> AllTypes = getAllTypes(); - } - - namespace type::quaternion - { - std::vector<type::quaternion::ElementType> getAllTypes() - { - std::vector<type::quaternion::ElementType> ret; - for(const auto& el : aron::codegenerator::cpp::generator::Quaternion::ElementType2Cpp) - { - ret.push_back(el.first); - } - return ret; - } - const std::vector<type::quaternion::ElementType> AllTypes = getAllTypes(); - } - - namespace type::image - { - std::vector<type::image::PixelType> getAllTypes() - { - std::vector<type::image::PixelType> ret; - for(const auto& el : aron::codegenerator::cpp::generator::Image::PixelType2Cpp) - { - ret.push_back(el.first); - } - return ret; - } - const std::vector<type::image::PixelType> AllTypes = getAllTypes(); - } - - namespace type::pointcloud - { - std::vector<type::pointcloud::VoxelType> getAllTypes() - { - std::vector<type::pointcloud::VoxelType> ret; - for(const auto& el : aron::codegenerator::cpp::generator::PointCloud::VoxelType2Cpp) - { - ret.push_back(el.first); - } - return ret; - } - const std::vector<type::pointcloud::VoxelType> AllTypes = getAllTypes(); - } - - namespace util - { - // generate i in [min, max) - int generateRandom(int max, int min) - { - if (max < min) - { - throw error::AronException(__PRETTY_FUNCTION__, "The max value "+std::to_string(max)+" is lower than the min value "+std::to_string(min)); - } - int random = (std::rand() % (max - min)) + min; - return random; - } - - template <class T> - T getRandomElement(const std::vector<T>& vec) - { - int i = generateRandom(vec.size(), 0); - return vec.at(i); - } - - template <class ValueT> - std::string getRandomKey(const std::map<std::string, ValueT>& m) - { - std::vector<std::string> keys; - for (const auto [k, _] : m) - { - keys.push_back(k); - } - return getRandomElement(keys); - } - - std::string getRandomKey(const std::set<std::string>& set) - { - std::vector<std::string> keys; - for (const auto& k : set) - { - keys.push_back(k); - } - return getRandomElement(keys); - } - - bool fiftyPercentChance() - { - return generateRandom(2, 0); - } - - std::string generateRandomWord(const std::set<std::string>& usedKeys = {}) - { - // https://randomwordgenerator.com/ - // script to convert random words into string: - // jQuery("#result li i").remove(); var str = ""; jQuery("#result li").each(function() {str += jQuery(this).html() + ", " }); console.log(str); - const std::vector<std::string> words = - { - "jaw", "river", "bow", "profession", "heat", "interference", "slave", "population", "deport", "redeem", "digress", "penny", "cousin", "beef", "Bible", "fuss", - "urgency", "tasty", "innovation", "upset", "gold", "day", "remunerate", "strain", "district", "panel", "choke", "rack", "parameter", "despair", "extort", "country", - "hesitate", "record", "brand", "confusion", "discreet", "accept", "lifestyle", "option", "corn", "charity", "miss", "viable", "glance", "norm", "meet", "bird", - "ribbon", "guideline" - }; - - int i = generateRandom(words.size(), 0); - std::string key = words.at(i); - - while (usedKeys.count(key) > 0) - { - key = generateRandomWord(usedKeys); - } - - return key; - } - - std::vector<unsigned char> generateRandomBlob(unsigned int size) - { - std::vector<unsigned char> new_blob(size, 0); - for (unsigned int i = 0; i < size; ++i) - { - new_blob[i] = (generateRandom(128, 0)); - } - return new_blob; - } - } - - class Randomizer - { - public: - Randomizer() - { - std::srand(std::time(nullptr)); - }; - - type::VariantPtr generateRandomType(bool allowMaybeType = false, bool firstObject = false) const - { - type::Descriptor nextType = type::Descriptor::eObject; - if (!firstObject) - { - nextType = util::getRandomElement(type::AllDescriptors); - } - - type::Maybe nextMaybeType = type::Maybe::eNone; - if (allowMaybeType && !firstObject) - { - nextMaybeType = util::getRandomElement(type::AllMaybeTypes); - } - (void) nextMaybeType; //unused - - switch (nextType) - { - case type::Descriptor::eAnyObject: [[fallthrough]]; - case type::Descriptor::eObject: - { - std::string objectName = util::generateRandomWord(); - - int members = util::generateRandom(4, 2); - std::set<std::string> usedKeys = {objectName}; - std::map<std::string, type::VariantPtr> elements; - for (int i = 0; i < members; ++i) - { - std::string key = util::generateRandomWord(usedKeys); - usedKeys.insert(key); - - type::VariantPtr m = generateRandomType(false); - elements.insert({key, m}); - } - - auto t = std::make_shared<type::Object>(objectName, std::vector<std::string>(), std::vector<std::string>(), elements); - return t; - } - case type::Descriptor::eIntEnum: - { - std::string intEnumName = util::generateRandomWord(); - - std::set<std::string> usedKeys = {intEnumName}; - std::map<std::string, int> acceptedValues; - for (int i = 0; i < util::generateRandom(5, 2); ++i) - { - std::string key = util::generateRandomWord(usedKeys); - usedKeys.insert(key); - - acceptedValues.insert({key, i}); - } - auto t = std::make_shared<type::IntEnum>(intEnumName, acceptedValues); - return t; - } - case type::Descriptor::eDict: - { - type::VariantPtr a = generateRandomType(false); - auto t = std::make_shared<type::Dict>(a); - return t; - } - case type::Descriptor::eTuple: - { - int members = util::generateRandom(4, 2); - std::vector<type::VariantPtr> acceptedTypes; - for (int i = 0; i < members; ++i) - { - type::VariantPtr m = generateRandomType(false); - acceptedTypes.push_back(m); - } - - auto t = std::make_shared<type::Tuple>(acceptedTypes); - return t; - } - case type::Descriptor::eList: - { - type::VariantPtr a = generateRandomType(false); - - auto t = std::make_shared<type::List>(a); - return t; - } - case type::Descriptor::ePair: - { - type::VariantPtr a = generateRandomType(false); - type::VariantPtr b = generateRandomType(false); - - auto t = std::make_shared<type::Pair>(a,b); - return t; - } - case type::Descriptor::eNDArray: - { - // TODO (fabian.peller) - // fall through EigenMatrix - } - case type::Descriptor::eMatrix: - { - auto t = std::make_shared<type::Matrix>(); - auto type = util::getRandomElement(type::matrix::AllTypes); - t->setElementType(type); - t->setRows(util::generateRandom(10, 1)); - t->setRows(util::generateRandom(10, 1)); - return t; - } - case type::Descriptor::eQuaternion: - { - auto t = std::make_shared<type::Quaternion>(); - auto type = util::getRandomElement(type::quaternion::AllTypes); - t->setElementType(type); - return t; - } - case type::Descriptor::eImage: - { - auto t = std::make_shared<type::Image>(); - auto type = util::getRandomElement(type::image::AllTypes); - t->setPixelType(type); - return t; - } - case type::Descriptor::ePointCloud: - { - auto t = std::make_shared<type::PointCloud>(); - auto type = util::getRandomElement(type::pointcloud::AllTypes); - t->setVoxelType(type); - return t; - } - case type::Descriptor::eInt: - { - auto t = std::make_shared<type::Int>(); - return t; - } - case type::Descriptor::eLong: - { - auto t = std::make_shared<type::Long>(); - return t; - } - case type::Descriptor::eFloat: - { - auto t = std::make_shared<type::Float>(); - return t; - } - case type::Descriptor::eDouble: - { - auto t = std::make_shared<type::Double>(); - return t; - } - case type::Descriptor::eString: - { - auto t = std::make_shared<type::String>(); - return t; - } - case type::Descriptor::eBool: - { - auto t = std::make_shared<type::Bool>(); - return t; - } - case type::Descriptor::eDateTime: - { - auto t = std::make_shared<type::DateTime>(); - return t; - } - case type::Descriptor::eUnknown: - { - throw error::AronException(__PRETTY_FUNCTION__, "No valid type found!"); - } - } - } - - data::VariantPtr generateEmptyAronDataFromType(const type::VariantPtr& type, bool ignore_maybe = false) const - { - if (type->getMaybe() != type::Maybe::eNone && !ignore_maybe) - { - if (util::fiftyPercentChance()) - { - return nullptr; - } - } - - const type::Descriptor desc = type->getDescriptor(); - switch (desc) - { - // In an object, we do not want to edit the keys. - case type::Descriptor::eObject: - { - type::ObjectPtr t = type::Object::DynamicCastAndCheck(type); - auto d = std::make_shared<data::Dict>(); - for (const auto& [k, tt] : t->getMemberTypes()) - { - d->addElement(k, generateEmptyAronDataFromType(tt)); - } - return d; - } - - case type::Descriptor::eIntEnum: - { - auto t = type::IntEnum::DynamicCastAndCheck(type); - auto d = std::make_shared<data::Int>(); - return d; - } - - // here all totally random - case type::Descriptor::eDict: - { - auto t = type::Dict::DynamicCastAndCheck(type); - return data::VariantPtr(new data::Dict()); - } - - case type::Descriptor::eList: - { - auto t = type::List::DynamicCastAndCheck(type); - return data::VariantPtr(new data::List()); - } - - case type::Descriptor::ePair: - { - auto t = type::Pair::DynamicCastAndCheck(type); - return data::VariantPtr(new data::List()); - } - - case type::Descriptor::eTuple: - { - auto t = type::Tuple::DynamicCastAndCheck(type); - return data::VariantPtr(new data::List()); - } - - case type::Descriptor::eMatrix: - { - auto t = type::Matrix::DynamicCastAndCheck(type); - auto d = std::make_shared<data::NDArray>(); - d->setShape({(int) t->getRows(), (int) t->getCols(), aron::codegenerator::cpp::generator::Matrix::ElementType2Cpp.at(t->getElementType()).second}); - d->setType(aron::codegenerator::cpp::generator::Matrix::ElementType2Cpp.at(t->getElementType()).first); - return d; - } - - case type::Descriptor::eQuaternion: - { - auto t = type::Quaternion::DynamicCastAndCheck(type); - auto d = std::make_shared<data::NDArray>(); - d->setShape({1, 4, aron::codegenerator::cpp::generator::Quaternion::ElementType2Cpp.at(t->getElementType()).second}); - d->setType(aron::codegenerator::cpp::generator::Quaternion::ElementType2Cpp.at(t->getElementType()).first); - return d; - } - - case type::Descriptor::eImage: - { - auto t = type::Image::DynamicCastAndCheck(type); - auto d = std::make_shared<data::NDArray>(); - d->setShape({util::generateRandom(10, 1), util::generateRandom(10, 1), aron::codegenerator::cpp::generator::Image::PixelType2Cpp.at(t->getPixelType()).second}); - d->setType("5"); - return d; - } - - case type::Descriptor::ePointCloud: - { - auto t = type::PointCloud::DynamicCastAndCheck(type); - auto d = std::make_shared<data::NDArray>(); - d->setShape({util::generateRandom(10, 1), util::generateRandom(10, 1), aron::codegenerator::cpp::generator::PointCloud::VoxelType2Cpp.at(t->getVoxelType()).second}); - d->setType(aron::codegenerator::cpp::generator::PointCloud::VoxelType2Cpp.at(t->getVoxelType()).first); - return d; - } - - case type::Descriptor::eNDArray: - { - auto t = type::NDArray::DynamicCastAndCheck(type); - auto d = std::make_shared<data::NDArray>(); - return d; - } - - case type::Descriptor::eInt: - { - auto t = type::Int::DynamicCastAndCheck(type); - return data::VariantPtr(new data::Int()); - } - - case type::Descriptor::eLong: - { - auto t = type::Long::DynamicCastAndCheck(type); - return data::VariantPtr(new data::Long()); - } - - case type::Descriptor::eFloat: - { - auto t = type::Float::DynamicCastAndCheck(type); - return data::VariantPtr(new data::Float()); - } - - case type::Descriptor::eDouble: - { - auto t = type::Double::DynamicCastAndCheck(type); - return data::VariantPtr(new data::Double()); - } - - case type::Descriptor::eString: - { - auto t = type::String::DynamicCastAndCheck(type); - return data::VariantPtr(new data::String()); - } - - case type::Descriptor::eBool: - { - auto t = type::Bool::DynamicCastAndCheck(type); - return data::VariantPtr(new data::Bool()); - } - - case type::Descriptor::eDateTime: - { - auto t = type::DateTime::DynamicCastAndCheck(type); - return data::VariantPtr(new data::Dict()); - } - - default: - { - throw error::AronException(__PRETTY_FUNCTION__, "No valid type found!"); - } - } - } - - void initializeRandomly(data::VariantPtr& data, const type::VariantPtr& type, bool use_existing_data = true) const - { - if (!use_existing_data) - { - data = generateEmptyAronDataFromType(type); - } - if (!data) - { - if (type->getMaybe() == type::Maybe::eNone) - { - throw error::AronException(__PRETTY_FUNCTION__, "The data is null but the type is not a maybe type. This is not valid."); - } - return; - } - - // Containers - type::Descriptor desc = type->getDescriptor(); - switch (desc) - { - case type::Descriptor::eAnyObject: [[fallthrough]]; - case type::Descriptor::eObject: - { - auto t = type::Object::DynamicCastAndCheck(type); - auto d = data::Dict::DynamicCastAndCheck(data); - initializeRandomly(d, *t); - break; - } - case type::Descriptor::eList: - { - auto t = type::List::DynamicCastAndCheck(type); - auto d = data::List::DynamicCastAndCheck(data); - initializeRandomly(d, *t); - break; - } - case type::Descriptor::eDict: - { - auto t = type::Dict::DynamicCastAndCheck(type); - auto d = data::Dict::DynamicCastAndCheck(data); - initializeRandomly(d, *t); - break; - } - case type::Descriptor::eTuple: - { - auto t = type::Tuple::DynamicCastAndCheck(type); - auto d = data::List::DynamicCastAndCheck(data); - initializeRandomly(d, *t); - break; - } - case type::Descriptor::ePair: - { - auto t = type::Pair::DynamicCastAndCheck(type); - auto d = data::List::DynamicCastAndCheck(data); - initializeRandomly(d, *t); - break; - } - case type::Descriptor::eIntEnum: - { - auto t = type::IntEnum::DynamicCastAndCheck(type); - auto d = data::Int::DynamicCastAndCheck(data); - initializeRandomly(d, *t); - break; - } - case type::Descriptor::eMatrix: - { - auto t = type::Matrix::DynamicCastAndCheck(type); - auto d = data::NDArray::DynamicCastAndCheck(data); - initializeRandomly(d, *t); - break; - } - case type::Descriptor::eNDArray: - { - auto t = type::NDArray::DynamicCastAndCheck(type); - auto d = data::NDArray::DynamicCastAndCheck(data); - initializeRandomly(d, *t); - break; - } - case type::Descriptor::eQuaternion: - { - auto t = type::Quaternion::DynamicCastAndCheck(type); - auto d = data::NDArray::DynamicCastAndCheck(data); - initializeRandomly(d, *t); - break; - } - case type::Descriptor::eImage: - { - auto t = type::Image::DynamicCastAndCheck(type); - auto d = data::NDArray::DynamicCastAndCheck(data); - initializeRandomly(d, *t); - break; - } - case type::Descriptor::ePointCloud: - { - auto t = type::PointCloud::DynamicCastAndCheck(type); - auto d = data::NDArray::DynamicCastAndCheck(data); - initializeRandomly(d, *t); - break; - } - case type::Descriptor::eInt: - { - auto t = type::Int::DynamicCastAndCheck(type); - auto d = data::Int::DynamicCastAndCheck(data); - initializeRandomly(d, *t); - break; - } - case type::Descriptor::eLong: - { - auto t = type::Long::DynamicCastAndCheck(type); - auto d = data::Long::DynamicCastAndCheck(data); - initializeRandomly(d, *t); - break; - } - case type::Descriptor::eFloat: - { - auto t = type::Float::DynamicCastAndCheck(type); - auto d = data::Float::DynamicCastAndCheck(data); - initializeRandomly(d, *t); - break; - } - case type::Descriptor::eDouble: - { - auto t = type::Double::DynamicCastAndCheck(type); - auto d = data::Double::DynamicCastAndCheck(data); - initializeRandomly(d, *t); - break; - } - case type::Descriptor::eString: - { - auto t = type::String::DynamicCastAndCheck(type); - auto d = data::String::DynamicCastAndCheck(data); - initializeRandomly(d, *t); - break; - } - case type::Descriptor::eBool: - { - auto t = type::Bool::DynamicCastAndCheck(type); - auto d = data::Bool::DynamicCastAndCheck(data); - initializeRandomly(d, *t); - break; - } - case type::Descriptor::eDateTime: - { - auto t = type::DateTime::DynamicCastAndCheck(type); - auto d = data::Dict::DynamicCastAndCheck(data); - initializeRandomly(d, *t); - break; - } - case type::Descriptor::eUnknown: - { - throw error::AronException(__PRETTY_FUNCTION__, "No valid type found!"); - } - } - - } - - void initializeRandomly(data::DictPtr& data, const type::Object& type, bool use_existing_data = true) const - { - for (auto& [key, nextData] : data->getElements()) - { - initializeRandomly(nextData, type.getMemberTypes()[key], use_existing_data); - data->removeElement(key); - data->addElement(key, nextData); - } - } - - void initializeRandomly(data::DictPtr& data, const type::Dict& type, bool use_existing_data = true) const - { - data->clear(); - int numElements = util::generateRandom(5, 1); - std::set<std::string> usedKeys; - for (int i = 0; i < numElements; ++i) - { - std::string key = util::generateRandomWord(usedKeys); - usedKeys.insert(key); - data::VariantPtr newData = generateEmptyAronDataFromType(type.getAcceptedType()); - initializeRandomly(newData, type.getAcceptedType(), use_existing_data); - data->addElement(key, newData); - } - } - - void initializeRandomly(data::ListPtr& data, const type::Tuple& type, bool use_existing_data = true) const - { - std::vector<data::VariantPtr> newElements; - - unsigned int i = 0; - for (auto& nextData : data->getElements()) - { - initializeRandomly(nextData, type.getAcceptedType(i++), use_existing_data); - newElements.push_back(nextData); - } - - data->clear(); - for (const auto& el : newElements) - { - data->addElement(el); - } - } - - void initializeRandomly(data::ListPtr& data, const type::Pair& type, bool use_existing_data = true) const - { - data::VariantPtr first = data->getElement(0); - data::VariantPtr second = data->getElement(1); - initializeRandomly(first, type.getFirstAcceptedType(), use_existing_data); - initializeRandomly(second, type.getSecondAcceptedType(), use_existing_data); - - data->clear(); - data->addElement(first); - data->addElement(second); - } - - void initializeRandomly(data::ListPtr& data, const type::List& type, bool use_existing_data = true) const - { - data->clear(); - int numElements = util::generateRandom(5, 1); - for (int i = 0; i < numElements; ++i) - { - data::VariantPtr newData = generateEmptyAronDataFromType(type.getAcceptedType()); - initializeRandomly(newData, type.getAcceptedType(), use_existing_data); - data->addElement(newData); - } - } - - void initializeRandomly(data::NDArrayPtr& data, const type::Variant& type) const - { - std::vector<int> dims = data->getShape(); - if (!dims.empty()) - { - int bytes = std::accumulate(std::begin(dims), std::end(dims), 1, std::multiplies<int>()); - std::vector<unsigned char> blob = util::generateRandomBlob(bytes); - data->setData(bytes, blob.data()); - } - } - - void initializeRandomly(data::IntPtr& data, const type::Variant& type) const - { - data->setValue(util::generateRandom(1000, -1000)); - } - - void initializeRandomly(data::LongPtr& data, const type::Variant& type) const - { - data->setValue(util::generateRandom(1000, -1000)); - } - - void initializeRandomly(data::FloatPtr& data, const type::Variant& type) const - { - data->setValue(util::generateRandom(1000, -1000)); - } - - void initializeRandomly(data::DoublePtr& data, const type::Variant& type) const - { - data->setValue(util::generateRandom(1000, -1000)); - } - - void initializeRandomly(data::BoolPtr& data, const type::Variant& type) const - { - data->setValue(util::fiftyPercentChance()); - } - - void initializeRandomly(data::StringPtr& data, const type::Variant& type) const - { - data->setValue(util::generateRandomWord()); - } - - void initializeRandomly(data::DictPtr& data, const type::DateTime& type) const - { - //data->setValue(util::generateRandomWord()); - } - }; -} diff --git a/source/RobotAPI/libraries/aron/core/type/converter/Converter.h b/source/RobotAPI/libraries/aron/core/type/converter/Converter.h index 48c91d42f..e166ab432 100644 --- a/source/RobotAPI/libraries/aron/core/type/converter/Converter.h +++ b/source/RobotAPI/libraries/aron/core/type/converter/Converter.h @@ -245,14 +245,6 @@ namespace armarx::aron::type last_returned = w.writeString(maybe, p); }; - void visitDateTime(ReaderInputType& o) final - { - type::Maybe maybe; - Path p; - r.readDateTime(o, maybe, p); - last_returned = w.writeDateTime(maybe, p); - }; - void visitUnknown(ReaderInputType& o) final { if (!r.readNull(o)) diff --git a/source/RobotAPI/libraries/aron/core/type/rw/Reader.h b/source/RobotAPI/libraries/aron/core/type/rw/Reader.h index ebe518169..790a0d9fb 100644 --- a/source/RobotAPI/libraries/aron/core/type/rw/Reader.h +++ b/source/RobotAPI/libraries/aron/core/type/rw/Reader.h @@ -96,9 +96,6 @@ namespace armarx::aron::type /// Extract information from an bool type virtual void readBool(const InputType& input, type::Maybe& maybe, Path& p) = 0; - /// Extract information from an time type - virtual void readDateTime(const InputType& input, type::Maybe& maybe, Path& p) = 0; - /// Extract information from an time type virtual void readAnyObject(const InputType& input, type::Maybe& maybe, Path& p) = 0; @@ -110,7 +107,7 @@ namespace armarx::aron::type } // Convenience methods without path - void readObject(const InputType& input, std::string& name, std::map<std::string, InputTypeNonConst>& memberTypes, type::Maybe& maybe) + /*void readObject(const InputType& input, std::string& name, std::map<std::string, InputTypeNonConst>& memberTypes, type::Maybe& maybe) { Path p; return readObject(input, name, memberTypes, maybe, p); @@ -212,11 +209,11 @@ namespace armarx::aron::type return readBool(input, maybe, p); } - void readDateTime(const InputType& input, type::Maybe& maybe) + void readAnyObject(const InputType& input, type::any::AnyObjectType& t, type::Maybe& maybe) { Path p; - return readDateTime(input, maybe, p); - } + return readBool(input, t, maybe, p); + }*/ }; template <class T> diff --git a/source/RobotAPI/libraries/aron/core/type/rw/Writer.h b/source/RobotAPI/libraries/aron/core/type/rw/Writer.h index b95d17a48..5cba5dd67 100644 --- a/source/RobotAPI/libraries/aron/core/type/rw/Writer.h +++ b/source/RobotAPI/libraries/aron/core/type/rw/Writer.h @@ -97,9 +97,6 @@ namespace armarx::aron::type /// Construct a bool from the params virtual ReturnType writeBool(const type::Maybe maybe, const Path& p) = 0; - /// Construct a time from the params - virtual ReturnType writeDateTime(const type::Maybe maybe, const Path& p) = 0; - /// Construct a time from the params virtual ReturnType writeAnyObject(const type::Maybe maybe, const Path& p) = 0; diff --git a/source/RobotAPI/libraries/aron/core/type/rw/json/Data.h b/source/RobotAPI/libraries/aron/core/type/rw/json/Data.h index 59484fd35..a3dbadf76 100644 --- a/source/RobotAPI/libraries/aron/core/type/rw/json/Data.h +++ b/source/RobotAPI/libraries/aron/core/type/rw/json/Data.h @@ -77,84 +77,83 @@ namespace armarx::aron::type::rw::json namespace conversion { const std::map<type::Descriptor, std::string> Descriptor2String = { - {type::Descriptor::eDict, rw::json::constantes::DICT_TYPENAME_SLUG}, - {type::Descriptor::eList, rw::json::constantes::LIST_TYPENAME_SLUG}, - {type::Descriptor::ePair, rw::json::constantes::PAIR_TYPENAME_SLUG}, - {type::Descriptor::eTuple, rw::json::constantes::TUPLE_TYPENAME_SLUG}, - {type::Descriptor::eObject, rw::json::constantes::OBJECT_TYPENAME_SLUG}, - {type::Descriptor::eNDArray, rw::json::constantes::NDARRAY_TYPENAME_SLUG}, - {type::Descriptor::eMatrix, rw::json::constantes::MATRIX_TYPENAME_SLUG}, - {type::Descriptor::eImage, rw::json::constantes::IMAGE_TYPENAME_SLUG}, - {type::Descriptor::ePointCloud, rw::json::constantes::POINT_CLOUD_TYPENAME_SLUG}, - {type::Descriptor::eQuaternion, rw::json::constantes::QUATERNION_TYPENAME_SLUG}, - {type::Descriptor::eIntEnum, rw::json::constantes::INT_ENUM_TYPENAME_SLUG}, - {type::Descriptor::eInt, rw::json::constantes::INT_TYPENAME_SLUG}, - {type::Descriptor::eLong, rw::json::constantes::LONG_TYPENAME_SLUG}, - {type::Descriptor::eFloat, rw::json::constantes::FLOAT_TYPENAME_SLUG}, - {type::Descriptor::eDouble, rw::json::constantes::DOUBLE_TYPENAME_SLUG}, - {type::Descriptor::eBool, rw::json::constantes::BOOL_TYPENAME_SLUG}, - {type::Descriptor::eString, rw::json::constantes::STRING_TYPENAME_SLUG}, - {type::Descriptor::eDateTime, rw::json::constantes::TIME_TYPENAME_SLUG}, - {type::Descriptor::eAnyObject, rw::json::constantes::ANY_OBJECT_TYPENAME_SLUG} + {type::Descriptor::DICT, rw::json::constantes::DICT_TYPENAME_SLUG}, + {type::Descriptor::LIST, rw::json::constantes::LIST_TYPENAME_SLUG}, + {type::Descriptor::PAIR, rw::json::constantes::PAIR_TYPENAME_SLUG}, + {type::Descriptor::TUPLE, rw::json::constantes::TUPLE_TYPENAME_SLUG}, + {type::Descriptor::OBJECT, rw::json::constantes::OBJECT_TYPENAME_SLUG}, + {type::Descriptor::NDARRAY, rw::json::constantes::NDARRAY_TYPENAME_SLUG}, + {type::Descriptor::MATRIX, rw::json::constantes::MATRIX_TYPENAME_SLUG}, + {type::Descriptor::IMAGE, rw::json::constantes::IMAGE_TYPENAME_SLUG}, + {type::Descriptor::POINTCLOUD, rw::json::constantes::POINT_CLOUD_TYPENAME_SLUG}, + {type::Descriptor::QUATERNION, rw::json::constantes::QUATERNION_TYPENAME_SLUG}, + {type::Descriptor::INT_ENUM, rw::json::constantes::INT_ENUM_TYPENAME_SLUG}, + {type::Descriptor::INT, rw::json::constantes::INT_TYPENAME_SLUG}, + {type::Descriptor::LONG, rw::json::constantes::LONG_TYPENAME_SLUG}, + {type::Descriptor::FLOAT, rw::json::constantes::FLOAT_TYPENAME_SLUG}, + {type::Descriptor::DOUBLE, rw::json::constantes::DOUBLE_TYPENAME_SLUG}, + {type::Descriptor::BOOL, rw::json::constantes::BOOL_TYPENAME_SLUG}, + {type::Descriptor::STRING, rw::json::constantes::STRING_TYPENAME_SLUG}, + {type::Descriptor::ANY_OBJECT, rw::json::constantes::ANY_OBJECT_TYPENAME_SLUG} }; const auto String2Descriptor = aron::conversion::util::InvertMap(Descriptor2String); const std::map<type::Maybe, std::string> Maybe2String = { - {type::Maybe::eNone, "type::maybe::none"}, - {type::Maybe::eOptional, "type::maybe::optional"}, - {type::Maybe::eRawPointer, "type::maybe::raw_ptr"}, - {type::Maybe::eSharedPointer, "type::maybe::shared_ptr"}, - {type::Maybe::eUniquePointer, "type::maybe::unique_ptr"} + {type::Maybe::NONE, "type::maybe::NONE"}, + {type::Maybe::OPTIONAL, "type::maybe::OPTIONAL"}, + {type::Maybe::RAW_PTR, "type::maybe::RAW_PTR"}, + {type::Maybe::SHARED_PTR, "type::maybe::SHARED_PTR"}, + {type::Maybe::UNIQUE_PTR, "type::maybe::UNIQUE_PTR"} }; const auto String2Maybe = aron::conversion::util::InvertMap(Maybe2String); const std::map<type::ndarray::ElementType, std::string> NDArrayType2String = { - {type::ndarray::ElementType::int8, "type::ndarray::int8"}, - {type::ndarray::ElementType::int16, "type::ndarray::int16"}, - {type::ndarray::ElementType::int32, "type::ndarray::int32"}, - {type::ndarray::ElementType::uint8, "type::ndarray::uint8"}, - {type::ndarray::ElementType::uint16, "type::ndarray::uint16"}, - {type::ndarray::ElementType::uint32, "type::ndarray::uint32"}, - {type::ndarray::ElementType::float32, "type::ndarray::float32"}, - {type::ndarray::ElementType::float64, "type::ndarray::float64"} + {type::ndarray::ElementType::INT8, "type::ndarray::INT8"}, + {type::ndarray::ElementType::INT16, "type::ndarray::INT16"}, + {type::ndarray::ElementType::INT32, "type::ndarray::INT32"}, + {type::ndarray::ElementType::UINT8, "type::ndarray::UINT8"}, + {type::ndarray::ElementType::UINT16, "type::ndarray::UINT16"}, + {type::ndarray::ElementType::UINT32, "type::ndarray::UINT32"}, + {type::ndarray::ElementType::FLOAT32, "type::ndarray::FLOAT32"}, + {type::ndarray::ElementType::FLOAT64, "type::ndarray::FLOAT64"} }; const auto String2NDArrayType = aron::conversion::util::InvertMap(NDArrayType2String); const std::map<type::matrix::ElementType, std::string> MatrixType2String = { - {type::matrix::ElementType::int16, "type::matrix::int16"}, - {type::matrix::ElementType::int32, "type::matrix::int32"}, - {type::matrix::ElementType::int64, "type::matrix::int64"}, - {type::matrix::ElementType::float32, "type::matrix::float32"}, - {type::matrix::ElementType::float64, "type::matrix::float64"} + {type::matrix::ElementType::INT16, "type::matrix::INT16"}, + {type::matrix::ElementType::INT32, "type::matrix::INT32"}, + {type::matrix::ElementType::INT64, "type::matrix::INT64"}, + {type::matrix::ElementType::FLOAT32, "type::matrix::FLOAT32"}, + {type::matrix::ElementType::FLOAT64, "type::matrix::FLOAT64"} }; const auto String2MatrixType = aron::conversion::util::InvertMap(MatrixType2String); const std::map<type::quaternion::ElementType, std::string> QuaternionType2String = { - {type::quaternion::ElementType::float32, "type::quaternion::float32"}, - {type::quaternion::ElementType::float64, "type::quaternion::float64"} + {type::quaternion::ElementType::FLOAT32, "type::quaternion::FLOAT32"}, + {type::quaternion::ElementType::FLOAT64, "type::quaternion::FLOAT64"} }; const auto String2QuaternionType = aron::conversion::util::InvertMap(QuaternionType2String); const std::map<type::image::PixelType, std::string> PixelType2String = { - {type::image::PixelType::rgb24, "type::image::rgb24"}, - {type::image::PixelType::depth32, "type::image::depth32"} + {type::image::PixelType::RGB24, "type::image::RGB24"}, + {type::image::PixelType::DEPTH32, "type::image::DEPTH32"} }; const auto String2PixelType = aron::conversion::util::InvertMap(PixelType2String); const std::map<type::pointcloud::VoxelType, std::string> VoxelType2String = { - {type::pointcloud::VoxelType::PointXYZ, "type::pointcloud::pointxyz"}, - {type::pointcloud::VoxelType::PointXYZI, "type::pointcloud::pointxyzi"}, - {type::pointcloud::VoxelType::PointXYZL, "type::pointcloud::pointxyzl"}, - {type::pointcloud::VoxelType::PointXYZRGB, "type::pointcloud::pointxyzrgb"}, - {type::pointcloud::VoxelType::PointXYZRGBA, "type::pointcloud::pointxyzrgba"}, - {type::pointcloud::VoxelType::PointXYZRGBL, "type::pointcloud::pointxyzrgbl"}, - {type::pointcloud::VoxelType::PointXYZHSV, "type::pointcloud::pointxyzhsv"} + {type::pointcloud::VoxelType::POINT_XYZ, "type::pointcloud::POINT_XYZ"}, + {type::pointcloud::VoxelType::POINT_XYZI, "type::pointcloud::POINT_XYZI"}, + {type::pointcloud::VoxelType::POINT_XYZL, "type::pointcloud::POINT_XYZL"}, + {type::pointcloud::VoxelType::POINT_XYZRGB, "type::pointcloud::POINT_XYZRGB"}, + {type::pointcloud::VoxelType::POINT_XYZRGBA, "type::pointcloud::POINT_XYZRGBA"}, + {type::pointcloud::VoxelType::POINT_XYZRGBL, "type::pointcloud::POINT_XYZRGBL"}, + {type::pointcloud::VoxelType::POINT_XYZHSV, "type::pointcloud::POINT_XYZHSV"} }; const auto String2VoxelType = aron::conversion::util::InvertMap(VoxelType2String); } diff --git a/source/RobotAPI/libraries/aron/core/type/rw/reader/nlohmannJSON/NlohmannJSONReader.cpp b/source/RobotAPI/libraries/aron/core/type/rw/reader/nlohmannJSON/NlohmannJSONReader.cpp index f48d2cd43..028b6681c 100644 --- a/source/RobotAPI/libraries/aron/core/type/rw/reader/nlohmannJSON/NlohmannJSONReader.cpp +++ b/source/RobotAPI/libraries/aron/core/type/rw/reader/nlohmannJSON/NlohmannJSONReader.cpp @@ -211,13 +211,6 @@ namespace armarx::aron::type::reader maybe = rw::json::conversion::String2Maybe.at(input[rw::json::constantes::MAYBE_SLUG]); } - void NlohmannJSONReader::readDateTime(const nlohmann::json& input, type::Maybe& maybe, Path& p) - { - getAronMetaInformationForType(input, rw::json::constantes::TIME_TYPENAME_SLUG, p); - - maybe = rw::json::conversion::String2Maybe.at(input[rw::json::constantes::MAYBE_SLUG]); - } - void NlohmannJSONReader::readAnyObject(const nlohmann::json& input, type::Maybe& maybe, Path& p) { getAronMetaInformationForType(input, rw::json::constantes::ANY_OBJECT_TYPENAME_SLUG, p); diff --git a/source/RobotAPI/libraries/aron/core/type/rw/reader/nlohmannJSON/NlohmannJSONReader.h b/source/RobotAPI/libraries/aron/core/type/rw/reader/nlohmannJSON/NlohmannJSONReader.h index 252c8ce4a..3775977b4 100644 --- a/source/RobotAPI/libraries/aron/core/type/rw/reader/nlohmannJSON/NlohmannJSONReader.h +++ b/source/RobotAPI/libraries/aron/core/type/rw/reader/nlohmannJSON/NlohmannJSONReader.h @@ -41,27 +41,26 @@ namespace armarx::aron::type::reader type::Descriptor getDescriptor(InputType& input) final; - void readObject(InputType& input, std::string& name, std::vector<std::string>& templates, std::vector<std::string>& templateInstantiations, std::map<std::string, InputTypeNonConst>& memberTypes, type::Maybe& maybe, Path& p) override; - void readList(InputType& input, InputTypeNonConst& acceptedType, type::Maybe& maybe, Path& p) override; - void readDict(InputType& input, InputTypeNonConst& acceptedType, type::Maybe& maybe, Path& p) override; - void readTuple(InputType& input, std::vector<InputTypeNonConst>& acceptedTypes, type::Maybe& maybe, Path& p) override; - void readPair(InputType& input, InputTypeNonConst& acceptedType1, InputTypeNonConst& acceptedType2, type::Maybe& maybe, Path& p) override; + void readObject(InputType& input, std::string& name, std::vector<std::string>& templates, std::vector<std::string>& templateInstantiations, std::map<std::string, InputTypeNonConst>& memberTypes, type::Maybe& maybe, Path& p = *std::unique_ptr<Path>(new Path())) override; + void readList(InputType& input, InputTypeNonConst& acceptedType, type::Maybe& maybe, Path& p = *std::unique_ptr<Path>(new Path())) override; + void readDict(InputType& input, InputTypeNonConst& acceptedType, type::Maybe& maybe, Path& p = *std::unique_ptr<Path>(new Path())) override; + void readTuple(InputType& input, std::vector<InputTypeNonConst>& acceptedTypes, type::Maybe& maybe, Path& p = *std::unique_ptr<Path>(new Path())) override; + void readPair(InputType& input, InputTypeNonConst& acceptedType1, InputTypeNonConst& acceptedType2, type::Maybe& maybe, Path& p = *std::unique_ptr<Path>(new Path())) override; - void readNDArray(InputType& input, int& ndim, type::ndarray::ElementType& type, type::Maybe& maybe, Path& p) override; - void readMatrix(InputType& input, int& rows, int& cols, type::matrix::ElementType& type, type::Maybe& maybe, Path& p) override; - void readQuaternion(InputType& input, type::quaternion::ElementType& type, type::Maybe& maybe, Path& p) override; - void readPointCloud(InputType& input, type::pointcloud::VoxelType& type, type::Maybe& maybe, Path& p) override; - void readImage(InputType& input, type::image::PixelType& type, type::Maybe& maybe, Path& p) override; + void readNDArray(InputType& input, int& ndim, type::ndarray::ElementType& type, type::Maybe& maybe, Path& p = *std::unique_ptr<Path>(new Path())) override; + void readMatrix(InputType& input, int& rows, int& cols, type::matrix::ElementType& type, type::Maybe& maybe, Path& p = *std::unique_ptr<Path>(new Path())) override; + void readQuaternion(InputType& input, type::quaternion::ElementType& type, type::Maybe& maybe, Path& p = *std::unique_ptr<Path>(new Path())) override; + void readPointCloud(InputType& input, type::pointcloud::VoxelType& type, type::Maybe& maybe, Path& p = *std::unique_ptr<Path>(new Path())) override; + void readImage(InputType& input, type::image::PixelType& type, type::Maybe& maybe, Path& p = *std::unique_ptr<Path>(new Path())) override; - void readIntEnum(InputType& input, std::string& name, std::map<std::string, int>& acceptedValues, type::Maybe& maybe, Path& p) override; + void readIntEnum(InputType& input, std::string& name, std::map<std::string, int>& acceptedValues, type::Maybe& maybe, Path& p = *std::unique_ptr<Path>(new Path())) override; - void readInt(InputType& input, type::Maybe& maybe, Path& p) override; - void readLong(InputType& input, type::Maybe& maybe, Path& p) override; - void readFloat(InputType& input, type::Maybe& maybe, Path& p) override; - void readDouble(InputType& input, type::Maybe& maybe, Path& p) override; - void readString(InputType& input, type::Maybe& maybe, Path& p) override; - void readBool(InputType& input, type::Maybe& maybe, Path& p) override; - void readDateTime(InputType& input, type::Maybe& maybe, Path& p) override; + void readInt(InputType& input, type::Maybe& maybe, Path& p = *std::unique_ptr<Path>(new Path())) override; + void readLong(InputType& input, type::Maybe& maybe, Path& p = *std::unique_ptr<Path>(new Path())) override; + void readFloat(InputType& input, type::Maybe& maybe, Path& p = *std::unique_ptr<Path>(new Path())) override; + void readDouble(InputType& input, type::Maybe& maybe, Path& p = *std::unique_ptr<Path>(new Path())) override; + void readString(InputType& input, type::Maybe& maybe, Path& p = *std::unique_ptr<Path>(new Path())) override; + void readBool(InputType& input, type::Maybe& maybe, Path& p = *std::unique_ptr<Path>(new Path())) override; void readAnyObject(InputType& input, type::Maybe& maybe, Path& p) override; }; diff --git a/source/RobotAPI/libraries/aron/core/type/rw/reader/variant/VariantReader.cpp b/source/RobotAPI/libraries/aron/core/type/rw/reader/variant/VariantReader.cpp index 44ed7f19d..452f240a5 100644 --- a/source/RobotAPI/libraries/aron/core/type/rw/reader/variant/VariantReader.cpp +++ b/source/RobotAPI/libraries/aron/core/type/rw/reader/variant/VariantReader.cpp @@ -209,15 +209,6 @@ namespace armarx::aron::type::reader p = o->getPath(); } - void VariantReader::readDateTime(const aron::type::VariantPtr& input, type::Maybe& maybe, Path& p) - { - ARMARX_CHECK_NOT_NULL(input); - auto o = type::DateTime::DynamicCastAndCheck(input); - - maybe = o->getMaybe(); - p = o->getPath(); - } - void VariantReader::readAnyObject(const aron::type::VariantPtr& input, type::Maybe& maybe, Path& p) { ARMARX_CHECK_NOT_NULL(input); diff --git a/source/RobotAPI/libraries/aron/core/type/rw/reader/variant/VariantReader.h b/source/RobotAPI/libraries/aron/core/type/rw/reader/variant/VariantReader.h index 4edd6b41b..5b9d592c0 100644 --- a/source/RobotAPI/libraries/aron/core/type/rw/reader/variant/VariantReader.h +++ b/source/RobotAPI/libraries/aron/core/type/rw/reader/variant/VariantReader.h @@ -42,28 +42,27 @@ namespace armarx::aron::type::reader type::Descriptor getDescriptor(InputType& input) final; - void readObject(InputType& input, std::string& name, std::vector<std::string>& templates, std::vector<std::string>& templateInstantiations, std::map<std::string, InputTypeNonConst>& memberTypes, type::Maybe& maybe, Path& p) override; - void readList(InputType& input, InputTypeNonConst& acceptedType, type::Maybe& maybe, Path& p) override; - void readDict(InputType& input, InputTypeNonConst& acceptedType, type::Maybe& maybe, Path& p) override; - void readTuple(InputType& input, std::vector<InputTypeNonConst>& acceptedTypes, type::Maybe& maybe, Path& p) override; - void readPair(InputType& input, InputTypeNonConst& acceptedType1, InputTypeNonConst& acceptedType2, type::Maybe& maybe, Path& p) override; + void readObject(InputType& input, std::string& name, std::vector<std::string>& templates, std::vector<std::string>& templateInstantiations, std::map<std::string, InputTypeNonConst>& memberTypes, type::Maybe& maybe, Path& p = *std::unique_ptr<Path>(new Path())) override; + void readList(InputType& input, InputTypeNonConst& acceptedType, type::Maybe& maybe, Path& p = *std::unique_ptr<Path>(new Path())) override; + void readDict(InputType& input, InputTypeNonConst& acceptedType, type::Maybe& maybe, Path& p = *std::unique_ptr<Path>(new Path())) override; + void readTuple(InputType& input, std::vector<InputTypeNonConst>& acceptedTypes, type::Maybe& maybe, Path& p = *std::unique_ptr<Path>(new Path())) override; + void readPair(InputType& input, InputTypeNonConst& acceptedType1, InputTypeNonConst& acceptedType2, type::Maybe& maybe, Path& p = *std::unique_ptr<Path>(new Path())) override; - void readNDArray(InputType& input, int& ndim, type::ndarray::ElementType& type, type::Maybe& maybe, Path& p) override; - void readMatrix(InputType& input, int& rows, int& cols, type::matrix::ElementType& type, type::Maybe& maybe, Path& p) override; - void readQuaternion(InputType& input, type::quaternion::ElementType& type, type::Maybe& maybe, Path& p) override; - void readPointCloud(InputType& input, type::pointcloud::VoxelType& type, type::Maybe& maybe, Path& p) override; - void readImage(InputType& input, type::image::PixelType& type, type::Maybe& maybe, Path& p) override; + void readNDArray(InputType& input, int& ndim, type::ndarray::ElementType& type, type::Maybe& maybe, Path& p = *std::unique_ptr<Path>(new Path())) override; + void readMatrix(InputType& input, int& rows, int& cols, type::matrix::ElementType& type, type::Maybe& maybe, Path& p = *std::unique_ptr<Path>(new Path())) override; + void readQuaternion(InputType& input, type::quaternion::ElementType& type, type::Maybe& maybe, Path& p = *std::unique_ptr<Path>(new Path())) override; + void readPointCloud(InputType& input, type::pointcloud::VoxelType& type, type::Maybe& maybe, Path& p = *std::unique_ptr<Path>(new Path())) override; + void readImage(InputType& input, type::image::PixelType& type, type::Maybe& maybe, Path& p = *std::unique_ptr<Path>(new Path())) override; - void readIntEnum(InputType& input, std::string& name, std::map<std::string, int>& acceptedValues, type::Maybe& maybe, Path& p) override; + void readIntEnum(InputType& input, std::string& name, std::map<std::string, int>& acceptedValues, type::Maybe& maybe, Path& p = *std::unique_ptr<Path>(new Path())) override; - void readInt(InputType& input, type::Maybe& maybe, Path& p) override; - void readLong(InputType& input, type::Maybe& maybe, Path& p) override; - void readFloat(InputType& input, type::Maybe& maybe, Path& p) override; - void readDouble(InputType& input, type::Maybe& maybe, Path& p) override; - void readString(InputType& input, type::Maybe& maybe, Path& p) override; - void readBool(InputType& input, type::Maybe& maybe, Path& p) override; - void readDateTime(InputType& input, type::Maybe& maybe, Path& p) override; + void readInt(InputType& input, type::Maybe& maybe, Path& p = *std::unique_ptr<Path>(new Path())) override; + void readLong(InputType& input, type::Maybe& maybe, Path& p = *std::unique_ptr<Path>(new Path())) override; + void readFloat(InputType& input, type::Maybe& maybe, Path& p = *std::unique_ptr<Path>(new Path())) override; + void readDouble(InputType& input, type::Maybe& maybe, Path& p = *std::unique_ptr<Path>(new Path())) override; + void readString(InputType& input, type::Maybe& maybe, Path& p = *std::unique_ptr<Path>(new Path())) override; + void readBool(InputType& input, type::Maybe& maybe, Path& p = *std::unique_ptr<Path>(new Path())) override; - void readAnyObject(InputType& input, type::Maybe& maybe, Path& p) override; + void readAnyObject(InputType& input, type::Maybe& maybe, Path& p = *std::unique_ptr<Path>(new Path())) override; }; } diff --git a/source/RobotAPI/libraries/aron/core/type/rw/writer/nlohmannJSON/NlohmannJSONWriter.cpp b/source/RobotAPI/libraries/aron/core/type/rw/writer/nlohmannJSON/NlohmannJSONWriter.cpp index e44122f0f..159c604b1 100644 --- a/source/RobotAPI/libraries/aron/core/type/rw/writer/nlohmannJSON/NlohmannJSONWriter.cpp +++ b/source/RobotAPI/libraries/aron/core/type/rw/writer/nlohmannJSON/NlohmannJSONWriter.cpp @@ -203,13 +203,6 @@ namespace armarx::aron::type::writer return o; } - nlohmann::json NlohmannJSONWriter::writeDateTime(const type::Maybe maybe, const Path& p) - { - nlohmann::json o; - setupAronMetaInformationForType(o, rw::json::constantes::TIME_TYPENAME_SLUG, maybe, p); - return o; - } - nlohmann::json NlohmannJSONWriter::writeAnyObject(const type::Maybe maybe, const Path& p) { nlohmann::json o; diff --git a/source/RobotAPI/libraries/aron/core/type/rw/writer/nlohmannJSON/NlohmannJSONWriter.h b/source/RobotAPI/libraries/aron/core/type/rw/writer/nlohmannJSON/NlohmannJSONWriter.h index 4b2f0a2bb..25e89bdf0 100644 --- a/source/RobotAPI/libraries/aron/core/type/rw/writer/nlohmannJSON/NlohmannJSONWriter.h +++ b/source/RobotAPI/libraries/aron/core/type/rw/writer/nlohmannJSON/NlohmannJSONWriter.h @@ -61,7 +61,6 @@ namespace armarx::aron::type::writer ReturnType writeDouble(const type::Maybe maybe, const Path& p = Path()) override; ReturnType writeString(const type::Maybe maybe, const Path& p = Path()) override; ReturnType writeBool(const type::Maybe maybe, const Path& p = Path()) override; - ReturnType writeDateTime(const type::Maybe maybe, const Path& p = Path()) override; ReturnType writeAnyObject(const type::Maybe maybe, const Path& p = Path()) override; }; diff --git a/source/RobotAPI/libraries/aron/core/type/rw/writer/variant/VariantWriter.cpp b/source/RobotAPI/libraries/aron/core/type/rw/writer/variant/VariantWriter.cpp index 7b25cecc3..87af08395 100644 --- a/source/RobotAPI/libraries/aron/core/type/rw/writer/variant/VariantWriter.cpp +++ b/source/RobotAPI/libraries/aron/core/type/rw/writer/variant/VariantWriter.cpp @@ -163,13 +163,6 @@ namespace armarx::aron::type::writer return o; } - aron::type::VariantPtr VariantWriter::writeDateTime(const type::Maybe maybe, const Path& p) - { - auto o = std::make_shared<type::DateTime>(p); - o->setMaybe(maybe); - return o; - } - aron::type::VariantPtr VariantWriter::writeAnyObject(const type::Maybe maybe, const Path& p) { auto o = std::make_shared<type::AnyObject>(p); diff --git a/source/RobotAPI/libraries/aron/core/type/rw/writer/variant/VariantWriter.h b/source/RobotAPI/libraries/aron/core/type/rw/writer/variant/VariantWriter.h index cfb81f32d..92fea0d71 100644 --- a/source/RobotAPI/libraries/aron/core/type/rw/writer/variant/VariantWriter.h +++ b/source/RobotAPI/libraries/aron/core/type/rw/writer/variant/VariantWriter.h @@ -57,7 +57,6 @@ namespace armarx::aron::type::writer ReturnType writeDouble(const type::Maybe maybe, const Path& p = Path()) override; ReturnType writeString(const type::Maybe maybe, const Path& p = Path()) override; ReturnType writeBool(const type::Maybe maybe, const Path& p = Path()) override; - ReturnType writeDateTime(const type::Maybe maybe, const Path& p = Path()) override; ReturnType writeAnyObject(const type::Maybe maybe, const Path& p = Path()) override; }; diff --git a/source/RobotAPI/libraries/aron/core/type/variant/All.h b/source/RobotAPI/libraries/aron/core/type/variant/All.h index 9ea6d08e1..46934fb07 100644 --- a/source/RobotAPI/libraries/aron/core/type/variant/All.h +++ b/source/RobotAPI/libraries/aron/core/type/variant/All.h @@ -5,7 +5,6 @@ #include "enum/All.h" #include "primitive/All.h" #include "any/All.h" -#include "dto/All.h" /** * A convenience header to include all aron files (full include, not forward declared) diff --git a/source/RobotAPI/libraries/aron/core/type/variant/Factory.cpp b/source/RobotAPI/libraries/aron/core/type/variant/Factory.cpp index 0baad531e..405a5e748 100644 --- a/source/RobotAPI/libraries/aron/core/type/variant/Factory.cpp +++ b/source/RobotAPI/libraries/aron/core/type/variant/Factory.cpp @@ -37,26 +37,25 @@ namespace armarx::aron::type auto descriptor = type::Aron2Descriptor(aron); switch(descriptor) { - case type::Descriptor::eList: return std::make_unique<type::List>(dynamic_cast<const type::dto::List&>(aron), path); - case type::Descriptor::eDict: return std::make_unique<type::Dict>(dynamic_cast<const type::dto::Dict&>(aron), path); - case type::Descriptor::ePair: return std::make_unique<type::Pair>(dynamic_cast<const type::dto::Pair&>(aron), path); - case type::Descriptor::eTuple: return std::make_unique<type::Tuple>(dynamic_cast<const type::dto::Tuple&>(aron), path); - case type::Descriptor::eObject: return std::make_unique<type::Object>(dynamic_cast<const type::dto::AronObject&>(aron), path); - case type::Descriptor::eNDArray: return std::make_unique<type::NDArray>(dynamic_cast<const type::dto::NDArray&>(aron), path); - case type::Descriptor::eMatrix: return std::make_unique<type::Matrix>(dynamic_cast<const type::dto::Matrix&>(aron), path); - case type::Descriptor::eImage: return std::make_unique<type::Image>(dynamic_cast<const type::dto::Image&>(aron), path); - case type::Descriptor::ePointCloud: return std::make_unique<type::PointCloud>(dynamic_cast<const type::dto::PointCloud&>(aron), path); - case type::Descriptor::eQuaternion: return std::make_unique<type::Quaternion>(dynamic_cast<const type::dto::Quaternion&>(aron), path); - case type::Descriptor::eIntEnum: return std::make_unique<type::IntEnum>(dynamic_cast<const type::dto::IntEnum&>(aron), path); - case type::Descriptor::eInt: return std::make_unique<type::Int>(dynamic_cast<const type::dto::AronInt&>(aron), path); - case type::Descriptor::eLong: return std::make_unique<type::Long>(dynamic_cast<const type::dto::AronLong&>(aron), path); - case type::Descriptor::eFloat: return std::make_unique<type::Float>(dynamic_cast<const type::dto::AronFloat&>(aron), path); - case type::Descriptor::eDouble: return std::make_unique<type::Double>(dynamic_cast<const type::dto::AronDouble&>(aron), path); - case type::Descriptor::eString: return std::make_unique<type::String>(dynamic_cast<const type::dto::AronString&>(aron), path); - case type::Descriptor::eBool: return std::make_unique<type::Bool>(dynamic_cast<const type::dto::AronBool&>(aron), path); - case type::Descriptor::eDateTime: return std::make_unique<type::DateTime>(dynamic_cast<const type::dto::AronDateTime&>(aron), path); - case type::Descriptor::eAnyObject: return std::make_unique<type::AnyObject>(dynamic_cast<const type::dto::AnyObject&>(aron), path); - case type::Descriptor::eUnknown: break; + case type::Descriptor::LIST: return std::make_unique<type::List>(dynamic_cast<const type::dto::List&>(aron), path); + case type::Descriptor::DICT: return std::make_unique<type::Dict>(dynamic_cast<const type::dto::Dict&>(aron), path); + case type::Descriptor::PAIR: return std::make_unique<type::Pair>(dynamic_cast<const type::dto::Pair&>(aron), path); + case type::Descriptor::TUPLE: return std::make_unique<type::Tuple>(dynamic_cast<const type::dto::Tuple&>(aron), path); + case type::Descriptor::OBJECT: return std::make_unique<type::Object>(dynamic_cast<const type::dto::AronObject&>(aron), path); + case type::Descriptor::NDARRAY: return std::make_unique<type::NDArray>(dynamic_cast<const type::dto::NDArray&>(aron), path); + case type::Descriptor::MATRIX: return std::make_unique<type::Matrix>(dynamic_cast<const type::dto::Matrix&>(aron), path); + case type::Descriptor::IMAGE: return std::make_unique<type::Image>(dynamic_cast<const type::dto::Image&>(aron), path); + case type::Descriptor::POINTCLOUD: return std::make_unique<type::PointCloud>(dynamic_cast<const type::dto::PointCloud&>(aron), path); + case type::Descriptor::QUATERNION: return std::make_unique<type::Quaternion>(dynamic_cast<const type::dto::Quaternion&>(aron), path); + case type::Descriptor::INT_ENUM: return std::make_unique<type::IntEnum>(dynamic_cast<const type::dto::IntEnum&>(aron), path); + case type::Descriptor::INT: return std::make_unique<type::Int>(dynamic_cast<const type::dto::AronInt&>(aron), path); + case type::Descriptor::LONG: return std::make_unique<type::Long>(dynamic_cast<const type::dto::AronLong&>(aron), path); + case type::Descriptor::FLOAT: return std::make_unique<type::Float>(dynamic_cast<const type::dto::AronFloat&>(aron), path); + case type::Descriptor::DOUBLE: return std::make_unique<type::Double>(dynamic_cast<const type::dto::AronDouble&>(aron), path); + case type::Descriptor::STRING: return std::make_unique<type::String>(dynamic_cast<const type::dto::AronString&>(aron), path); + case type::Descriptor::BOOL: return std::make_unique<type::Bool>(dynamic_cast<const type::dto::AronBool&>(aron), path); + case type::Descriptor::ANY_OBJECT: return std::make_unique<type::AnyObject>(dynamic_cast<const type::dto::AnyObject&>(aron), path); + case type::Descriptor::UNKNOWN: break; } throw error::ValueNotValidException(__PRETTY_FUNCTION__, "Got an unknown descriptor", std::to_string((int) descriptor) + " aka " + defaultconversion::string::Descriptor2String.at(descriptor), path); } diff --git a/source/RobotAPI/libraries/aron/core/type/variant/any/AnyObject.cpp b/source/RobotAPI/libraries/aron/core/type/variant/any/AnyObject.cpp index bd53947d9..78a17d080 100644 --- a/source/RobotAPI/libraries/aron/core/type/variant/any/AnyObject.cpp +++ b/source/RobotAPI/libraries/aron/core/type/variant/any/AnyObject.cpp @@ -33,12 +33,12 @@ namespace armarx::aron::type { /* constructors */ AnyObject::AnyObject(const Path& path) : - detail::AnyVariant<type::dto::AnyObject, AnyObject>(type::Descriptor::eAnyObject, path) + detail::AnyVariant<type::dto::AnyObject, AnyObject>(type::Descriptor::ANY_OBJECT, path) { } AnyObject::AnyObject(const type::dto::AnyObject&o, const Path& path) : - detail::AnyVariant<type::dto::AnyObject, AnyObject>(o, type::Descriptor::eAnyObject, path) + detail::AnyVariant<type::dto::AnyObject, AnyObject>(o, type::Descriptor::ANY_OBJECT, path) { } diff --git a/source/RobotAPI/libraries/aron/core/type/variant/container/Dict.cpp b/source/RobotAPI/libraries/aron/core/type/variant/container/Dict.cpp index 3919bf844..482c762d1 100644 --- a/source/RobotAPI/libraries/aron/core/type/variant/container/Dict.cpp +++ b/source/RobotAPI/libraries/aron/core/type/variant/container/Dict.cpp @@ -29,14 +29,14 @@ namespace armarx::aron::type { // constructors Dict::Dict(const VariantPtr& acceptedType, const Path& path) : - detail::ContainerVariant<type::dto::Dict, Dict>(type::Descriptor::eDict, path), + detail::ContainerVariant<type::dto::Dict, Dict>(type::Descriptor::DICT, path), acceptedType(acceptedType) { aron->acceptedType = acceptedType->toAronDTO(); } Dict::Dict(const type::dto::Dict& o, const Path& path) : - detail::ContainerVariant<type::dto::Dict, Dict>(o, type::Descriptor::eDict, path), + detail::ContainerVariant<type::dto::Dict, Dict>(o, type::Descriptor::DICT, path), acceptedType(FromAronDTO(*o.acceptedType, path.withAcceptedType())) { } diff --git a/source/RobotAPI/libraries/aron/core/type/variant/container/List.cpp b/source/RobotAPI/libraries/aron/core/type/variant/container/List.cpp index 807d64fed..7ee464bc1 100644 --- a/source/RobotAPI/libraries/aron/core/type/variant/container/List.cpp +++ b/source/RobotAPI/libraries/aron/core/type/variant/container/List.cpp @@ -28,14 +28,14 @@ namespace armarx::aron::type { // constructors List::List(const VariantPtr& acceptedType, const Path& path) : - detail::ContainerVariant<type::dto::List, List>(type::Descriptor::eList, path), + detail::ContainerVariant<type::dto::List, List>(type::Descriptor::LIST, path), acceptedType(acceptedType) { aron->acceptedType = acceptedType->toAronDTO(); } List::List(const type::dto::List& o, const Path& path) : - detail::ContainerVariant<type::dto::List, List>(o, type::Descriptor::eList, path), + detail::ContainerVariant<type::dto::List, List>(o, type::Descriptor::LIST, path), acceptedType(FromAronDTO(*o.acceptedType, path.withAcceptedType())) { } diff --git a/source/RobotAPI/libraries/aron/core/type/variant/container/Object.cpp b/source/RobotAPI/libraries/aron/core/type/variant/container/Object.cpp index eb27eedcd..526cc9f05 100644 --- a/source/RobotAPI/libraries/aron/core/type/variant/container/Object.cpp +++ b/source/RobotAPI/libraries/aron/core/type/variant/container/Object.cpp @@ -34,7 +34,7 @@ namespace armarx::aron::type // constructors Object::Object(const std::string& name, const std::vector<std::string>& templates, const std::vector<std::string>& templateInstantiations, const std::map<std::string, VariantPtr>& m, const Path& path) : - detail::ContainerVariant<type::dto::AronObject, Object>(type::Descriptor::eObject, path), + detail::ContainerVariant<type::dto::AronObject, Object>(type::Descriptor::OBJECT, path), memberTypes(m) { aron->templates = templates; @@ -47,7 +47,7 @@ namespace armarx::aron::type } Object::Object(const type::dto::AronObject& o, const Path& path) : - detail::ContainerVariant<type::dto::AronObject, Object>(o, type::Descriptor::eObject, path) + detail::ContainerVariant<type::dto::AronObject, Object>(o, type::Descriptor::OBJECT, path) { setObjectName(o.objectName); for (const auto& [key, t] : o.elementTypes) diff --git a/source/RobotAPI/libraries/aron/core/type/variant/container/Pair.cpp b/source/RobotAPI/libraries/aron/core/type/variant/container/Pair.cpp index 48e0c6f4d..40b3cac3b 100644 --- a/source/RobotAPI/libraries/aron/core/type/variant/container/Pair.cpp +++ b/source/RobotAPI/libraries/aron/core/type/variant/container/Pair.cpp @@ -29,7 +29,7 @@ namespace armarx::aron::type { // constructors Pair::Pair(const VariantPtr& acceptedType1, const VariantPtr& acceptedType2, const Path& path) : - detail::ContainerVariant<type::dto::Pair, Pair>(type::Descriptor::ePair, path), + detail::ContainerVariant<type::dto::Pair, Pair>(type::Descriptor::PAIR, path), acceptedType1(acceptedType1), acceptedType2(acceptedType2) { @@ -38,7 +38,7 @@ namespace armarx::aron::type } Pair::Pair(const type::dto::Pair& o, const Path& path) : - detail::ContainerVariant<type::dto::Pair, Pair>(o, type::Descriptor::ePair, path), + detail::ContainerVariant<type::dto::Pair, Pair>(o, type::Descriptor::PAIR, path), acceptedType1(FromAronDTO(*o.acceptedType1, path.withAcceptedTypeIndex(0))), acceptedType2(FromAronDTO(*o.acceptedType2, path.withAcceptedTypeIndex(1))) { diff --git a/source/RobotAPI/libraries/aron/core/type/variant/container/Tuple.cpp b/source/RobotAPI/libraries/aron/core/type/variant/container/Tuple.cpp index 9fdca45e7..0879de17b 100644 --- a/source/RobotAPI/libraries/aron/core/type/variant/container/Tuple.cpp +++ b/source/RobotAPI/libraries/aron/core/type/variant/container/Tuple.cpp @@ -30,7 +30,7 @@ namespace armarx::aron::type { // constructors Tuple::Tuple(const std::vector<VariantPtr>& acceptedTypes, const Path& path) : - detail::ContainerVariant<type::dto::Tuple, Tuple>(type::Descriptor::eTuple, path), + detail::ContainerVariant<type::dto::Tuple, Tuple>(type::Descriptor::TUPLE, path), acceptedTypes(acceptedTypes) { for (const auto& acceptedType : acceptedTypes) @@ -40,7 +40,7 @@ namespace armarx::aron::type } Tuple::Tuple(const type::dto::Tuple& o, const Path& path) : - detail::ContainerVariant<type::dto::Tuple, Tuple>(o, type::Descriptor::eTuple, path) + detail::ContainerVariant<type::dto::Tuple, Tuple>(o, type::Descriptor::TUPLE, path) { unsigned int i = 0; for (const auto& t : o.elementTypes) diff --git a/source/RobotAPI/libraries/aron/core/type/variant/dto/All.h b/source/RobotAPI/libraries/aron/core/type/variant/dto/All.h deleted file mode 100644 index 930e1a3cd..000000000 --- a/source/RobotAPI/libraries/aron/core/type/variant/dto/All.h +++ /dev/null @@ -1,11 +0,0 @@ -#pragma once - -#include "DateTime.h" - -/** - * A convenience header to include all dto aron files (full include, not forward declared) - */ -namespace armarx::aron::type -{ - -} diff --git a/source/RobotAPI/libraries/aron/core/type/variant/dto/DateTime.cpp b/source/RobotAPI/libraries/aron/core/type/variant/dto/DateTime.cpp deleted file mode 100644 index 655137a7c..000000000 --- a/source/RobotAPI/libraries/aron/core/type/variant/dto/DateTime.cpp +++ /dev/null @@ -1,61 +0,0 @@ -/* - * This file is part of ArmarX. - * - * Copyright (C) 2012-2016, High Performance Humanoid Technologies (H2T), - * Karlsruhe Institute of Technology (KIT), all rights reserved. - * - * ArmarX is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License version 2 as - * published by the Free Software Foundation. - * - * ArmarX is distributed in the hope that it will be useful, but - * WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see <http://www.gnu.org/licenses/>. - * - * @author Fabian Peller-Konrad (fabian dot peller-konrad at kit dot edu) - * @copyright http://www.gnu.org/licenses/gpl-2.0.txt - * GNU General Public License - */ - - -// STD/STL -#include <string> -#include <map> - -// Header -#include "DateTime.h" - -namespace armarx::aron::type -{ - /* constructors */ - DateTime::DateTime(const Path& path) : - detail::DtoVariant<type::dto::AronDateTime, DateTime>(type::Descriptor::eDateTime, path) - { - } - - DateTime::DateTime(const type::dto::AronDateTime&o, const Path& path) : - detail::DtoVariant<type::dto::AronDateTime, DateTime>(o, type::Descriptor::eDateTime, path) - { - } - - /* public member functions */ - type::dto::AronDateTimePtr DateTime::toDateTimeDTO() const - { - return this->aron; - } - - /* virtual implementations */ - std::string DateTime::getShortName() const - { - return "DateTime"; - } - - std::string DateTime::getFullName() const - { - return "armarx::aron::type::DateTime"; - } -} diff --git a/source/RobotAPI/libraries/aron/core/type/variant/dto/DateTime.h b/source/RobotAPI/libraries/aron/core/type/variant/dto/DateTime.h deleted file mode 100644 index 1c851e54c..000000000 --- a/source/RobotAPI/libraries/aron/core/type/variant/dto/DateTime.h +++ /dev/null @@ -1,51 +0,0 @@ -/* - * This file is part of ArmarX. - * - * Copyright (C) 2012-2016, High Performance Humanoid Technologies (H2T), - * Karlsruhe Institute of Technology (KIT), all rights reserved. - * - * ArmarX is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License version 2 as - * published by the Free Software Foundation. - * - * ArmarX is distributed in the hope that it will be useful, but - * WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see <http://www.gnu.org/licenses/>. - * - * @author Fabian Peller-Konrad (fabian dot peller-konrad at kit dot edu) - * @copyright http://www.gnu.org/licenses/gpl-2.0.txt - * GNU General Public License - */ - -#pragma once - -// STD/STL -#include <string> - -// Base class -#include "../detail/DtoVariant.h" - -namespace armarx::aron::type -{ - /** - * @brief The Time class. It represents the time type - */ - class DateTime : - public detail::DtoVariant<type::dto::AronDateTime, DateTime> - { - public: - /* constructors */ - DateTime(const Path& = Path()); - DateTime(const type::dto::AronDateTime&, const Path& = Path()); - - type::dto::AronDateTimePtr toDateTimeDTO() const; - - /* virtual implementations */ - virtual std::string getShortName() const override; - virtual std::string getFullName() const override; - }; -} diff --git a/source/RobotAPI/libraries/aron/core/type/variant/enum/IntEnum.cpp b/source/RobotAPI/libraries/aron/core/type/variant/enum/IntEnum.cpp index 734509d9e..5ccace227 100644 --- a/source/RobotAPI/libraries/aron/core/type/variant/enum/IntEnum.cpp +++ b/source/RobotAPI/libraries/aron/core/type/variant/enum/IntEnum.cpp @@ -28,14 +28,14 @@ namespace armarx::aron::type { // constructors IntEnum::IntEnum(const std::string& name, const std::map<std::string, int>& valueMap, const Path& path) : - detail::EnumVariant<type::dto::IntEnum, IntEnum>(type::Descriptor::eIntEnum, path) + detail::EnumVariant<type::dto::IntEnum, IntEnum>(type::Descriptor::INT_ENUM, path) { aron->enumName = name; aron->acceptedValues = valueMap; } IntEnum::IntEnum(const type::dto::IntEnum& o, const Path& path) : - detail::EnumVariant<type::dto::IntEnum, IntEnum>(o, type::Descriptor::eIntEnum, path) + detail::EnumVariant<type::dto::IntEnum, IntEnum>(o, type::Descriptor::INT_ENUM, path) { } diff --git a/source/RobotAPI/libraries/aron/core/type/variant/forward_declarations.h b/source/RobotAPI/libraries/aron/core/type/variant/forward_declarations.h index 0bf79c5b4..ce0d34761 100644 --- a/source/RobotAPI/libraries/aron/core/type/variant/forward_declarations.h +++ b/source/RobotAPI/libraries/aron/core/type/variant/forward_declarations.h @@ -30,7 +30,6 @@ namespace armarx::aron::type using DoublePtr = std::shared_ptr<class Double>; using StringPtr = std::shared_ptr<class String>; using BoolPtr = std::shared_ptr<class Bool>; - using DateTimePtr = std::shared_ptr<class DateTime>; } diff --git a/source/RobotAPI/libraries/aron/core/type/variant/ndarray/Image.cpp b/source/RobotAPI/libraries/aron/core/type/variant/ndarray/Image.cpp index 987a85ce2..f5eed5e4e 100644 --- a/source/RobotAPI/libraries/aron/core/type/variant/ndarray/Image.cpp +++ b/source/RobotAPI/libraries/aron/core/type/variant/ndarray/Image.cpp @@ -33,21 +33,21 @@ namespace armarx::aron::type { const std::map<image::PixelType, std::string> Image::Pixeltype2String { - {image::PixelType::rgb24, "rgb24"}, - {image::PixelType::depth32, "depth32"} + {image::PixelType::RGB24, "RGB24"}, + {image::PixelType::DEPTH32, "DEPTH32"} }; const std::map<std::string, image::PixelType> Image::String2Pixeltype = conversion::util::InvertMap(Pixeltype2String); // constructors Image::Image(const Path& path) : - detail::NDArrayVariant<type::dto::Image, Image>(type::Descriptor::eImage, path) + detail::NDArrayVariant<type::dto::Image, Image>(type::Descriptor::IMAGE, path) { } Image::Image(const type::dto::Image& o, const Path& path) : - detail::NDArrayVariant<type::dto::Image, Image>(o, type::Descriptor::eImage, path) + detail::NDArrayVariant<type::dto::Image, Image>(o, type::Descriptor::IMAGE, path) { } diff --git a/source/RobotAPI/libraries/aron/core/type/variant/ndarray/Matrix.cpp b/source/RobotAPI/libraries/aron/core/type/variant/ndarray/Matrix.cpp index 18d57ce03..b7657a871 100644 --- a/source/RobotAPI/libraries/aron/core/type/variant/ndarray/Matrix.cpp +++ b/source/RobotAPI/libraries/aron/core/type/variant/ndarray/Matrix.cpp @@ -31,23 +31,23 @@ namespace armarx::aron::type { const std::map<matrix::ElementType, std::string> Matrix::Elementtype2String { - {matrix::ElementType::int16, "int16"}, - {matrix::ElementType::int32, "int32"}, - {matrix::ElementType::int64, "int64"}, - {matrix::ElementType::float32, "float32"}, - {matrix::ElementType::float64, "float64"} + {matrix::ElementType::INT16, "INT16"}, + {matrix::ElementType::INT32, "INT32"}, + {matrix::ElementType::INT64, "INT64"}, + {matrix::ElementType::FLOAT32, "FLOAT32"}, + {matrix::ElementType::FLOAT64, "FLOAT64"} }; const std::map<std::string, matrix::ElementType> Matrix::String2Elementtype = conversion::util::InvertMap(Elementtype2String); // constructors Matrix::Matrix(const Path& path) : - detail::NDArrayVariant<type::dto::Matrix, Matrix>(type::Descriptor::eMatrix, path) + detail::NDArrayVariant<type::dto::Matrix, Matrix>(type::Descriptor::MATRIX, path) { } Matrix::Matrix(const type::dto::Matrix& o, const Path& path) : - detail::NDArrayVariant<type::dto::Matrix, Matrix>(o, type::Descriptor::eMatrix, path) + detail::NDArrayVariant<type::dto::Matrix, Matrix>(o, type::Descriptor::MATRIX, path) { } diff --git a/source/RobotAPI/libraries/aron/core/type/variant/ndarray/NDArray.cpp b/source/RobotAPI/libraries/aron/core/type/variant/ndarray/NDArray.cpp index cbbf517ba..bddbcf91c 100644 --- a/source/RobotAPI/libraries/aron/core/type/variant/ndarray/NDArray.cpp +++ b/source/RobotAPI/libraries/aron/core/type/variant/ndarray/NDArray.cpp @@ -28,12 +28,12 @@ namespace armarx::aron::type { // constructors NDArray::NDArray(const Path& path) : - detail::NDArrayVariant<type::dto::NDArray, NDArray>(type::Descriptor::eNDArray, path) + detail::NDArrayVariant<type::dto::NDArray, NDArray>(type::Descriptor::NDARRAY, path) { } NDArray::NDArray(const type::dto::NDArray& o, const Path& path) : - detail::NDArrayVariant<type::dto::NDArray, NDArray>(o, type::Descriptor::eNDArray, path) + detail::NDArrayVariant<type::dto::NDArray, NDArray>(o, type::Descriptor::NDARRAY, path) { } diff --git a/source/RobotAPI/libraries/aron/core/type/variant/ndarray/PointCloud.cpp b/source/RobotAPI/libraries/aron/core/type/variant/ndarray/PointCloud.cpp index 10a347302..c28a750e2 100644 --- a/source/RobotAPI/libraries/aron/core/type/variant/ndarray/PointCloud.cpp +++ b/source/RobotAPI/libraries/aron/core/type/variant/ndarray/PointCloud.cpp @@ -28,25 +28,25 @@ namespace armarx::aron::type { const std::map<pointcloud::VoxelType, std::string> PointCloud::Voxeltype2String { - {pointcloud::VoxelType::PointXYZ, "PointXYZ"}, - {pointcloud::VoxelType::PointXYZI, "PointXYZI"}, - {pointcloud::VoxelType::PointXYZL, "PointXYZL"}, - {pointcloud::VoxelType::PointXYZRGB, "PointXYZRGB"}, - {pointcloud::VoxelType::PointXYZRGBL, "PointXYZRGBL"}, - {pointcloud::VoxelType::PointXYZRGBA, "PointXYZRGBA"}, - {pointcloud::VoxelType::PointXYZHSV, "PointXYZHSV"} + {pointcloud::VoxelType::POINT_XYZ, "POINT_XYZ"}, + {pointcloud::VoxelType::POINT_XYZI, "POINT_XYZI"}, + {pointcloud::VoxelType::POINT_XYZL, "POINT_XYZL"}, + {pointcloud::VoxelType::POINT_XYZRGB, "POINT_XYZRGB"}, + {pointcloud::VoxelType::POINT_XYZRGBL, "POINT_XYZRGBL"}, + {pointcloud::VoxelType::POINT_XYZRGBA, "POINT_XYZRGBA"}, + {pointcloud::VoxelType::POINT_XYZHSV, "POINT_XYZHSV"} }; const std::map<std::string, pointcloud::VoxelType> PointCloud::String2Voxeltype = conversion::util::InvertMap(Voxeltype2String); // constructors PointCloud::PointCloud(const Path& path) : - detail::NDArrayVariant<type::dto::PointCloud, PointCloud>(type::Descriptor::ePointCloud, path) + detail::NDArrayVariant<type::dto::PointCloud, PointCloud>(type::Descriptor::POINTCLOUD, path) { } PointCloud::PointCloud(const type::dto::PointCloud& o, const Path& path) : - detail::NDArrayVariant<type::dto::PointCloud, PointCloud>(o, type::Descriptor::ePointCloud, path) + detail::NDArrayVariant<type::dto::PointCloud, PointCloud>(o, type::Descriptor::POINTCLOUD, path) { } diff --git a/source/RobotAPI/libraries/aron/core/type/variant/ndarray/Quaternion.cpp b/source/RobotAPI/libraries/aron/core/type/variant/ndarray/Quaternion.cpp index 5457ee844..0e1ff22fc 100644 --- a/source/RobotAPI/libraries/aron/core/type/variant/ndarray/Quaternion.cpp +++ b/source/RobotAPI/libraries/aron/core/type/variant/ndarray/Quaternion.cpp @@ -30,19 +30,19 @@ namespace armarx::aron::type { const std::map<quaternion::ElementType, std::string> Quaternion::Elementtype2String = { - {quaternion::ElementType::float32, "float32"}, - {quaternion::ElementType::float64, "float64"} + {quaternion::ElementType::FLOAT32, "FLOAT32"}, + {quaternion::ElementType::FLOAT64, "FLOAT64"} }; const std::map<std::string, quaternion::ElementType> Quaternion::String2Elementtype = conversion::util::InvertMap(Elementtype2String); // constructors Quaternion::Quaternion(const Path& path) : - detail::NDArrayVariant<type::dto::Quaternion, Quaternion>(type::Descriptor::eQuaternion, path) + detail::NDArrayVariant<type::dto::Quaternion, Quaternion>(type::Descriptor::QUATERNION, path) { } Quaternion::Quaternion(const type::dto::Quaternion& o, const Path& path) : - detail::NDArrayVariant<type::dto::Quaternion, Quaternion>(o, type::Descriptor::eQuaternion, path) + detail::NDArrayVariant<type::dto::Quaternion, Quaternion>(o, type::Descriptor::QUATERNION, path) { } diff --git a/source/RobotAPI/libraries/aron/core/type/variant/primitive/Bool.cpp b/source/RobotAPI/libraries/aron/core/type/variant/primitive/Bool.cpp index 9eca55904..fc5cdb5cb 100644 --- a/source/RobotAPI/libraries/aron/core/type/variant/primitive/Bool.cpp +++ b/source/RobotAPI/libraries/aron/core/type/variant/primitive/Bool.cpp @@ -33,12 +33,12 @@ namespace armarx::aron::type { /* constructors */ Bool::Bool(const Path& path) : - detail::PrimitiveVariant<type::dto::AronBool, Bool>(type::Descriptor::eBool, path) + detail::PrimitiveVariant<type::dto::AronBool, Bool>(type::Descriptor::BOOL, path) { } Bool::Bool(const type::dto::AronBool&o, const Path& path) : - detail::PrimitiveVariant<type::dto::AronBool, Bool>(o, type::Descriptor::eBool, path) + detail::PrimitiveVariant<type::dto::AronBool, Bool>(o, type::Descriptor::BOOL, path) { } diff --git a/source/RobotAPI/libraries/aron/core/type/variant/primitive/Double.cpp b/source/RobotAPI/libraries/aron/core/type/variant/primitive/Double.cpp index 256e0a61f..e4fd415fe 100644 --- a/source/RobotAPI/libraries/aron/core/type/variant/primitive/Double.cpp +++ b/source/RobotAPI/libraries/aron/core/type/variant/primitive/Double.cpp @@ -33,12 +33,12 @@ namespace armarx::aron::type { /* constructors */ Double::Double(const Path& path) : - detail::PrimitiveVariant<type::dto::AronDouble, Double>(type::Descriptor::eDouble, path) + detail::PrimitiveVariant<type::dto::AronDouble, Double>(type::Descriptor::DOUBLE, path) { } Double::Double(const type::dto::AronDouble&o, const Path& path) : - detail::PrimitiveVariant<type::dto::AronDouble, Double>(o, type::Descriptor::eDouble, path) + detail::PrimitiveVariant<type::dto::AronDouble, Double>(o, type::Descriptor::DOUBLE, path) { } diff --git a/source/RobotAPI/libraries/aron/core/type/variant/primitive/Float.cpp b/source/RobotAPI/libraries/aron/core/type/variant/primitive/Float.cpp index 3d08b5bda..45bbad7de 100644 --- a/source/RobotAPI/libraries/aron/core/type/variant/primitive/Float.cpp +++ b/source/RobotAPI/libraries/aron/core/type/variant/primitive/Float.cpp @@ -33,12 +33,12 @@ namespace armarx::aron::type { /* constructors */ Float::Float(const Path& path) : - detail::PrimitiveVariant<type::dto::AronFloat, Float>(type::Descriptor::eFloat, path) + detail::PrimitiveVariant<type::dto::AronFloat, Float>(type::Descriptor::FLOAT, path) { } Float::Float(const type::dto::AronFloat&o, const Path& path) : - detail::PrimitiveVariant<type::dto::AronFloat, Float>(o, type::Descriptor::eFloat, path) + detail::PrimitiveVariant<type::dto::AronFloat, Float>(o, type::Descriptor::FLOAT, path) { } diff --git a/source/RobotAPI/libraries/aron/core/type/variant/primitive/Int.cpp b/source/RobotAPI/libraries/aron/core/type/variant/primitive/Int.cpp index b371f53dd..6abe9850c 100644 --- a/source/RobotAPI/libraries/aron/core/type/variant/primitive/Int.cpp +++ b/source/RobotAPI/libraries/aron/core/type/variant/primitive/Int.cpp @@ -33,12 +33,12 @@ namespace armarx::aron::type { /* constructors */ Int::Int(const Path& path) : - detail::PrimitiveVariant<type::dto::AronInt, Int>(type::Descriptor::eInt, path) + detail::PrimitiveVariant<type::dto::AronInt, Int>(type::Descriptor::INT, path) { } Int::Int(const type::dto::AronInt&o, const Path& path) : - detail::PrimitiveVariant<type::dto::AronInt, Int>(o, type::Descriptor::eInt, path) + detail::PrimitiveVariant<type::dto::AronInt, Int>(o, type::Descriptor::INT, path) { } diff --git a/source/RobotAPI/libraries/aron/core/type/variant/primitive/Long.cpp b/source/RobotAPI/libraries/aron/core/type/variant/primitive/Long.cpp index 2654a773d..f7898bcf2 100644 --- a/source/RobotAPI/libraries/aron/core/type/variant/primitive/Long.cpp +++ b/source/RobotAPI/libraries/aron/core/type/variant/primitive/Long.cpp @@ -33,12 +33,12 @@ namespace armarx::aron::type { /* constructors */ Long::Long(const Path& path) : - detail::PrimitiveVariant<type::dto::AronLong, Long>(type::Descriptor::eLong, path) + detail::PrimitiveVariant<type::dto::AronLong, Long>(type::Descriptor::LONG, path) { } Long::Long(const type::dto::AronLong&o, const Path& path) : - detail::PrimitiveVariant<type::dto::AronLong, Long>(o, type::Descriptor::eLong, path) + detail::PrimitiveVariant<type::dto::AronLong, Long>(o, type::Descriptor::LONG, path) { } diff --git a/source/RobotAPI/libraries/aron/core/type/variant/primitive/String.cpp b/source/RobotAPI/libraries/aron/core/type/variant/primitive/String.cpp index 1cced6991..0ede75062 100644 --- a/source/RobotAPI/libraries/aron/core/type/variant/primitive/String.cpp +++ b/source/RobotAPI/libraries/aron/core/type/variant/primitive/String.cpp @@ -33,12 +33,12 @@ namespace armarx::aron::type { /* constructors */ String::String(const Path& path) : - detail::PrimitiveVariant<type::dto::AronString, String>(type::Descriptor::eString, path) + detail::PrimitiveVariant<type::dto::AronString, String>(type::Descriptor::STRING, path) { } String::String(const type::dto::AronString&o, const Path& path) : - detail::PrimitiveVariant<type::dto::AronString, String>(o, type::Descriptor::eString, path) + detail::PrimitiveVariant<type::dto::AronString, String>(o, type::Descriptor::STRING, path) { } diff --git a/source/RobotAPI/libraries/aron/core/type/visitor/RecursiveVisitor.h b/source/RobotAPI/libraries/aron/core/type/visitor/RecursiveVisitor.h index b8f73bff0..a2f46088a 100644 --- a/source/RobotAPI/libraries/aron/core/type/visitor/RecursiveVisitor.h +++ b/source/RobotAPI/libraries/aron/core/type/visitor/RecursiveVisitor.h @@ -39,7 +39,7 @@ namespace armarx::aron::type auto descriptor = v.getDescriptor(t); switch (descriptor) { - case type::Descriptor::eList: + case type::Descriptor::LIST: { v.visitListOnEnter(t); auto acceptedType = v.getListAcceptedType(t); @@ -47,7 +47,7 @@ namespace armarx::aron::type v.visitListOnExit(t); return; } - case type::Descriptor::ePair: + case type::Descriptor::PAIR: { v.visitPairOnEnter(t); auto acceptedTypes = v.getPairAcceptedTypes(t); @@ -56,7 +56,7 @@ namespace armarx::aron::type v.visitPairOnExit(t); return; } - case type::Descriptor::eTuple: + case type::Descriptor::TUPLE: { v.visitTupleOnEnter(t); unsigned int i = 0; @@ -68,7 +68,7 @@ namespace armarx::aron::type v.visitTupleOnExit(t); return; } - case type::Descriptor::eDict: + case type::Descriptor::DICT: { v.visitDictOnEnter(t); auto acceptedType = v.getDictAcceptedType(t); @@ -76,7 +76,7 @@ namespace armarx::aron::type v.visitDictOnExit(t); return; } - case type::Descriptor::eObject: + case type::Descriptor::OBJECT: { v.visitObjectOnEnter(t); for (const auto& [key, acceptedType] : v.getObjectElements(t)) @@ -86,35 +86,33 @@ namespace armarx::aron::type v.visitObjectOnExit(t); return; } - case type::Descriptor::eNDArray: + case type::Descriptor::NDARRAY: return v.visitNDArray(t); - case type::Descriptor::eMatrix: + case type::Descriptor::MATRIX: return v.visitMatrix(t); - case type::Descriptor::eImage: + case type::Descriptor::IMAGE: return v.visitImage(t); - case type::Descriptor::ePointCloud: + case type::Descriptor::POINTCLOUD: return v.visitPointCloud(t); - case type::Descriptor::eQuaternion: + case type::Descriptor::QUATERNION: return v.visitQuaternion(t); - case type::Descriptor::eInt: + case type::Descriptor::INT: return v.visitInt(t); - case type::Descriptor::eLong: + case type::Descriptor::LONG: return v.visitLong(t); - case type::Descriptor::eFloat: + case type::Descriptor::FLOAT: return v.visitFloat(t); - case type::Descriptor::eDouble: + case type::Descriptor::DOUBLE: return v.visitDouble(t); - case type::Descriptor::eString: + case type::Descriptor::STRING: return v.visitString(t); - case type::Descriptor::eBool: + case type::Descriptor::BOOL: return v.visitBool(t); - case type::Descriptor::eDateTime: - return v.visitDateTime(t); - case type::Descriptor::eAnyObject: + case type::Descriptor::ANY_OBJECT: return v.visitAnyObject(t); - case type::Descriptor::eIntEnum: + case type::Descriptor::INT_ENUM: return v.visitIntEnum(t); - case type::Descriptor::eUnknown: + case type::Descriptor::UNKNOWN: return v.visitUnknown(t); } } @@ -165,7 +163,6 @@ namespace armarx::aron::type virtual void visitDouble(Input&) {}; virtual void visitBool(Input&) {}; virtual void visitString(Input&) {}; - virtual void visitDateTime(Input&) {}; virtual void visitAnyObject(Input&) {}; virtual void visitUnknown(Input&) { throw error::AronException(__PRETTY_FUNCTION__, "Unknown type in visitor."); diff --git a/source/RobotAPI/libraries/aron/core/type/visitor/Visitor.h b/source/RobotAPI/libraries/aron/core/type/visitor/Visitor.h index 34cfbf7e4..9dfe2057d 100644 --- a/source/RobotAPI/libraries/aron/core/type/visitor/Visitor.h +++ b/source/RobotAPI/libraries/aron/core/type/visitor/Visitor.h @@ -44,45 +44,43 @@ namespace armarx::aron::type auto descriptor = v.getDescriptor(t); switch (descriptor) { - case type::Descriptor::eObject: + case type::Descriptor::OBJECT: return v.visitObject(t); - case type::Descriptor::eList: + case type::Descriptor::LIST: return v.visitList(t); - case type::Descriptor::eDict: + case type::Descriptor::DICT: return v.visitDict(t); - case type::Descriptor::ePair: + case type::Descriptor::PAIR: return v.visitPair(t); - case type::Descriptor::eTuple: + case type::Descriptor::TUPLE: return v.visitTuple(t); - case type::Descriptor::eNDArray: + case type::Descriptor::NDARRAY: return v.visitNDArray(t); - case type::Descriptor::eMatrix: + case type::Descriptor::MATRIX: return v.visitMatrix(t); - case type::Descriptor::eImage: + case type::Descriptor::IMAGE: return v.visitImage(t); - case type::Descriptor::ePointCloud: + case type::Descriptor::POINTCLOUD: return v.visitPointCloud(t); - case type::Descriptor::eQuaternion: + case type::Descriptor::QUATERNION: return v.visitQuaternion(t); - case type::Descriptor::eInt: + case type::Descriptor::INT: return v.visitInt(t); - case type::Descriptor::eLong: + case type::Descriptor::LONG: return v.visitLong(t); - case type::Descriptor::eFloat: + case type::Descriptor::FLOAT: return v.visitFloat(t); - case type::Descriptor::eDouble: + case type::Descriptor::DOUBLE: return v.visitDouble(t); - case type::Descriptor::eString: + case type::Descriptor::STRING: return v.visitString(t); - case type::Descriptor::eBool: + case type::Descriptor::BOOL: return v.visitBool(t); - case type::Descriptor::eDateTime: - return v.visitDateTime(t); - case type::Descriptor::eAnyObject: + case type::Descriptor::ANY_OBJECT: return v.visitAnyObject(t); - case type::Descriptor::eIntEnum: + case type::Descriptor::INT_ENUM: return v.visitIntEnum(t); - case type::Descriptor::eUnknown: + case type::Descriptor::UNKNOWN: return v.visitUnknown(t); } } @@ -126,7 +124,6 @@ namespace armarx::aron::type virtual void visitDouble(Input&) {}; virtual void visitBool(Input&) {}; virtual void visitString(Input&) {}; - virtual void visitDateTime(Input&) {}; virtual void visitAnyObject(Input&) {}; virtual void visitUnknown(Input&) { throw error::AronException(__PRETTY_FUNCTION__, "Unknown type in visitor."); } virtual ~Visitor() = default; diff --git a/source/RobotAPI/libraries/aron/core/type/visitor/variant/VariantVisitor.cpp b/source/RobotAPI/libraries/aron/core/type/visitor/variant/VariantVisitor.cpp index b26929640..d2b1c19a0 100644 --- a/source/RobotAPI/libraries/aron/core/type/visitor/variant/VariantVisitor.cpp +++ b/source/RobotAPI/libraries/aron/core/type/visitor/variant/VariantVisitor.cpp @@ -35,7 +35,7 @@ namespace armarx::aron::type { if (!n) { - return type::Descriptor::eUnknown; + return type::Descriptor::UNKNOWN; } return n->getDescriptor(); } @@ -147,12 +147,6 @@ namespace armarx::aron::type visitAronVariant(aron); } - void ConstVariantVisitor::visitDateTime(Input& i) - { - auto aron = type::DateTime::DynamicCastAndCheck(i); - visitAronVariant(aron); - } - void ConstVariantVisitor::visitAronVariant(const type::ObjectPtr&) {} void ConstVariantVisitor::visitAronVariant(const type::DictPtr&) {} void ConstVariantVisitor::visitAronVariant(const type::PairPtr&) {} @@ -170,7 +164,6 @@ namespace armarx::aron::type void ConstVariantVisitor::visitAronVariant(const type::DoublePtr&) {} void ConstVariantVisitor::visitAronVariant(const type::BoolPtr&) {} void ConstVariantVisitor::visitAronVariant(const type::StringPtr&) {} - void ConstVariantVisitor::visitAronVariant(const type::DateTimePtr&) {} /**************************************************************************** * RecursiveVariantVisitor diff --git a/source/RobotAPI/libraries/aron/core/type/visitor/variant/VariantVisitor.h b/source/RobotAPI/libraries/aron/core/type/visitor/variant/VariantVisitor.h index fa03254f8..e7e87fa45 100644 --- a/source/RobotAPI/libraries/aron/core/type/visitor/variant/VariantVisitor.h +++ b/source/RobotAPI/libraries/aron/core/type/visitor/variant/VariantVisitor.h @@ -60,7 +60,6 @@ namespace armarx::aron::type void visitDouble(Input&) override; void visitBool(Input&) override; void visitString(Input&) override; - void visitDateTime(Input&) override; // Use these if you do not want to cast manually virtual void visitAronVariant(const type::ObjectPtr&); @@ -76,7 +75,6 @@ namespace armarx::aron::type virtual void visitAronVariant(const type::IntEnumPtr&); virtual void visitAronVariant(const type::IntPtr&); virtual void visitAronVariant(const type::LongPtr&); - virtual void visitAronVariant(const type::DateTimePtr&); virtual void visitAronVariant(const type::FloatPtr&); virtual void visitAronVariant(const type::DoublePtr&); virtual void visitAronVariant(const type::BoolPtr&); diff --git a/source/RobotAPI/libraries/skills/manager/SkillManagerComponentPlugin.cpp b/source/RobotAPI/libraries/skills/manager/SkillManagerComponentPlugin.cpp index 76347bf5a..b83ad843b 100644 --- a/source/RobotAPI/libraries/skills/manager/SkillManagerComponentPlugin.cpp +++ b/source/RobotAPI/libraries/skills/manager/SkillManagerComponentPlugin.cpp @@ -83,4 +83,26 @@ namespace armarx (void) statusUpdate; // If you want to use the status, implement this method! } + + skills::manager::dto::SkillDescriptionMapMap SkillManagerComponentPluginUser::getSkillDescriptions(const Ice::Current ¤t) + { + skills::manager::dto::SkillDescriptionMapMap ret; + for (const auto& [n, s] : skillProviderMap) + { + skills::provider::dto::SkillDescriptionMap m = s->getSkillDescriptions(); + ret.insert({n, m}); + } + return ret; + } + + skills::manager::dto::SkillStatusUpdateMapMap SkillManagerComponentPluginUser::getSkillExecutionStatuses(const Ice::Current ¤t) + { + skills::manager::dto::SkillStatusUpdateMapMap ret; + for (const auto& [n, s] : skillProviderMap) + { + skills::provider::dto::SkillStatusUpdateMap m = s->getSkillExecutionStatuses(); + ret.insert({n, m}); + } + return ret; + } } diff --git a/source/RobotAPI/libraries/skills/manager/SkillManagerComponentPlugin.h b/source/RobotAPI/libraries/skills/manager/SkillManagerComponentPlugin.h index ba27d2bc1..e9c950c74 100644 --- a/source/RobotAPI/libraries/skills/manager/SkillManagerComponentPlugin.h +++ b/source/RobotAPI/libraries/skills/manager/SkillManagerComponentPlugin.h @@ -38,6 +38,9 @@ namespace armarx void updateStatusForSkill(const skills::provider::dto::SkillStatusUpdate& update, const Ice::Current ¤t) override; void abortSkill(const std::string& providerName, const std::string& skillName, const Ice::Current ¤t) override; + skills::manager::dto::SkillDescriptionMapMap getSkillDescriptions(const Ice::Current ¤t) override; + skills::manager::dto::SkillStatusUpdateMapMap getSkillExecutionStatuses(const Ice::Current ¤t) override; + private: armarx::plugins::SkillManagerComponentPlugin* plugin = nullptr; diff --git a/source/RobotAPI/libraries/skills/provider/PeriodicSkill.cpp b/source/RobotAPI/libraries/skills/provider/PeriodicSkill.cpp index 617501515..d459b9af7 100644 --- a/source/RobotAPI/libraries/skills/provider/PeriodicSkill.cpp +++ b/source/RobotAPI/libraries/skills/provider/PeriodicSkill.cpp @@ -37,7 +37,7 @@ namespace armarx::skills } Skill::Status - PeriodicSkill::execute(const aron::data::DictPtr& params, const CallbackT& callback) + PeriodicSkill::main(const aron::data::DictPtr& params, const CallbackT& callback) { if(not initialize(params)) { diff --git a/source/RobotAPI/libraries/skills/provider/PeriodicSkill.h b/source/RobotAPI/libraries/skills/provider/PeriodicSkill.h index 8c8f6c81c..6fb259f60 100644 --- a/source/RobotAPI/libraries/skills/provider/PeriodicSkill.h +++ b/source/RobotAPI/libraries/skills/provider/PeriodicSkill.h @@ -35,7 +35,7 @@ namespace armarx::skills PeriodicSkill(const SkillDescription& skillDescription, const armarx::Frequency& frequency); protected: - typename Skill::Status execute(const aron::data::DictPtr& params, + typename Skill::Status main(const aron::data::DictPtr& params, const Skill::CallbackT& callback) final; enum class Status diff --git a/source/RobotAPI/libraries/skills/provider/PeriodicSpecializedSkill.h b/source/RobotAPI/libraries/skills/provider/PeriodicSpecializedSkill.h index 018095661..2b6fd6f6d 100644 --- a/source/RobotAPI/libraries/skills/provider/PeriodicSpecializedSkill.h +++ b/source/RobotAPI/libraries/skills/provider/PeriodicSpecializedSkill.h @@ -45,7 +45,7 @@ namespace armarx::skills protected: typename Skill::Status - execute(const AronT& params, const Skill::CallbackT& callback) final + main(const AronT& params, const Skill::CallbackT& callback) final { if (not initialize(params)) { diff --git a/source/RobotAPI/libraries/skills/provider/Skill.cpp b/source/RobotAPI/libraries/skills/provider/Skill.cpp index c74910e43..c3265710f 100644 --- a/source/RobotAPI/libraries/skills/provider/Skill.cpp +++ b/source/RobotAPI/libraries/skills/provider/Skill.cpp @@ -11,20 +11,10 @@ namespace armarx Logging::setTag("armarx::skills::" + description.skillName); } - std::thread Skill::installTimeoutCondition() + void Skill::installCondition(std::function<bool()>&& f, std::function<void()>&& cb) { - // start timeout check - return std::thread{ [&](){ - if (description.timeoutMs <= 0) return; - long skillStartedAt = IceUtil::Time::now().toMilliSeconds(); - while(running and !stopRequested()) - { - auto now = IceUtil::Time::now().toMilliSeconds(); - if ((now - skillStartedAt) >= description.timeoutMs) notifyTimeoutReached(); - std::this_thread::sleep_for(std::chrono::milliseconds(100)); - } - } - }; + std::lock_guard l(callbacksMutex); + callbacks.push_back({f, cb}); } void Skill::notifyTimeoutReached() @@ -54,9 +44,30 @@ namespace armarx ARMARX_IMPORTANT << "Initializing Skill '" << description.skillName << "'"; // always called before execute (should not take longer than 100ms) + callbacks.clear(); running = true; started = IceUtil::Time::now(); - timeoutCheck = installTimeoutCondition(); + + // install timeout condition + installCondition( + [&](){ return (IceUtil::Time::now().toMilliSeconds() - started.toMilliSeconds()) >= description.timeoutMs; }, + [&](){ notifyTimeoutReached(); } + ); + + callbackThread = std::thread([&]() + { + while (running) + { + std::lock_guard l(callbacksMutex); + for (auto& p : callbacks) + { + auto& f = p.first; + auto& cb = p.second; + if (f()) cb(); + } + std::this_thread::sleep_for(std::chrono::milliseconds(50)); // check frequency + } + }); } void Skill::exit(const aron::data::DictPtr& params) @@ -67,14 +78,14 @@ namespace armarx // always called after execute (should not take longer than 100ms) running = false; - if (timeoutCheck.joinable()) + if (callbackThread.joinable()) { - timeoutCheck.join(); + callbackThread.join(); } exited = IceUtil::Time::now(); } - Skill::Status Skill::execute(const aron::data::DictPtr& params, const CallbackT& callback) + Skill::Status Skill::main(const aron::data::DictPtr& params, const CallbackT& callback) { (void) params; @@ -82,11 +93,11 @@ namespace armarx return Status::Succeeded; } - Skill::Status Skill::initExecuteExit(const aron::data::DictPtr& params, const CallbackT& callback) + Skill::Status Skill::execute(const aron::data::DictPtr& params, const CallbackT& callback) { this->reset(); this->init(params); - auto ret = this->execute(params); + auto ret = this->main(params); this->exit(params); return ret; } diff --git a/source/RobotAPI/libraries/skills/provider/Skill.h b/source/RobotAPI/libraries/skills/provider/Skill.h index 90a923ce3..0ecb43166 100644 --- a/source/RobotAPI/libraries/skills/provider/Skill.h +++ b/source/RobotAPI/libraries/skills/provider/Skill.h @@ -43,10 +43,10 @@ namespace armarx virtual void exit(const aron::data::DictPtr& params); /// Override this method with the actual implementation. The callback is for status updates to the calling instance - virtual Status execute(const aron::data::DictPtr& params, const CallbackT& callback = [](const aron::data::DictPtr& returnValue) { (void) returnValue; }); + virtual Status main(const aron::data::DictPtr& params, const CallbackT& callback = [](const aron::data::DictPtr& returnValue) { (void) returnValue; }); /// Do all methods at once. - Status initExecuteExit(const aron::data::DictPtr& params, const CallbackT& callback = [](const aron::data::DictPtr& returnValue) { (void) returnValue; }); + Status execute(const aron::data::DictPtr& params, const CallbackT& callback = [](const aron::data::DictPtr& returnValue) { (void) returnValue; }); /// Override if you have special members that needs to be resetted. It is called before the skill ititializes virtual void reset(); @@ -58,12 +58,16 @@ namespace armarx virtual bool stopRequested() const; private: - /// install a condition as a seperate thread - std::thread installTimeoutCondition(); + /// install a condition is easy + void installCondition(std::function<bool()>&& f, std::function<void()>&& cb); public: const SkillDescription description; + /// active conditions + std::vector<std::pair<std::function<bool()>, std::function<void()>>> callbacks; + mutable std::mutex callbacksMutex; + /// running params IceUtil::Time started = IceUtil::Time::milliSeconds(-1); IceUtil::Time exited = IceUtil::Time::milliSeconds(-1); @@ -78,7 +82,7 @@ namespace armarx std::atomic_bool timeoutReached = false; private: - std::thread timeoutCheck; + std::thread callbackThread; }; } } diff --git a/source/RobotAPI/libraries/skills/provider/SpecializedSkill.h b/source/RobotAPI/libraries/skills/provider/SpecializedSkill.h index 68711db01..b922bc341 100644 --- a/source/RobotAPI/libraries/skills/provider/SpecializedSkill.h +++ b/source/RobotAPI/libraries/skills/provider/SpecializedSkill.h @@ -27,7 +27,7 @@ namespace armarx } /// Override this method with the actual implementation. The callback is for status updates to the calling instance - virtual Status execute(const AronT& params, const CallbackT& callback = [](const aron::data::DictPtr& returnValue) { (void) returnValue; }) + virtual Status main(const AronT& params, const CallbackT& callback = [](const aron::data::DictPtr& returnValue) { (void) returnValue; }) { (void) params; return Status::Succeeded; @@ -43,19 +43,19 @@ namespace armarx (void) params; } - Status initExecuteExit(const AronT& params, const CallbackT& callback = [](const aron::data::DictPtr& returnValue) { (void) returnValue; }) + Status execute(const AronT& params, const CallbackT& callback = [](const aron::data::DictPtr& returnValue) { (void) returnValue; }) { - return Skill::initExecuteExit(params.toAron(), callback); + return Skill::execute(params.toAron(), callback); } /// Do not use anymore - Status execute(const aron::data::DictPtr& params, const CallbackT& callback = [](const aron::data::DictPtr& returnValue) { (void) returnValue; }) final + Status main(const aron::data::DictPtr& params, const CallbackT& callback = [](const aron::data::DictPtr& returnValue) { (void) returnValue; }) final { - Skill::execute(params, callback); + Skill::main(params, callback); AronT p; p.fromAron(params); - return execute(p, callback); + return main(p, callback); } /// Do not use anymore diff --git a/source/RobotAPI/libraries/skills/provider/detail/SkillImplementationWrapper.cpp b/source/RobotAPI/libraries/skills/provider/detail/SkillImplementationWrapper.cpp index c6add6570..15cc6af55 100644 --- a/source/RobotAPI/libraries/skills/provider/detail/SkillImplementationWrapper.cpp +++ b/source/RobotAPI/libraries/skills/provider/detail/SkillImplementationWrapper.cpp @@ -54,7 +54,7 @@ namespace armarx updateStatus(skills::provider::dto::Execution::Status::Running); skill->init(aron_params); - auto ret = skill->execute(aron_params, [&](const aron::data::DictPtr& update) { updateStatus(statusUpdate.status, update); }); + auto ret = skill->main(aron_params, [&](const aron::data::DictPtr& update) { updateStatus(statusUpdate.status, update); }); skill->exit(aron_params); switch (ret) diff --git a/source/RobotAPI/libraries/skills/provider/helper/LambdaSkillImplementation.cpp b/source/RobotAPI/libraries/skills/provider/helper/LambdaSkillImplementation.cpp index 9b761b403..25f589aab 100644 --- a/source/RobotAPI/libraries/skills/provider/helper/LambdaSkillImplementation.cpp +++ b/source/RobotAPI/libraries/skills/provider/helper/LambdaSkillImplementation.cpp @@ -5,7 +5,7 @@ namespace armarx namespace skills::helper { - Skill::Status LambdaSkill::execute(const aron::data::DictPtr& data, const CallbackT& callback) + Skill::Status LambdaSkill::main(const aron::data::DictPtr& data, const CallbackT& callback) { (void) callback; bool res = fun(data); diff --git a/source/RobotAPI/libraries/skills/provider/helper/LambdaSkillImplementation.h b/source/RobotAPI/libraries/skills/provider/helper/LambdaSkillImplementation.h index 63f537d4c..0f65572ac 100644 --- a/source/RobotAPI/libraries/skills/provider/helper/LambdaSkillImplementation.h +++ b/source/RobotAPI/libraries/skills/provider/helper/LambdaSkillImplementation.h @@ -18,7 +18,7 @@ namespace armarx {}; protected: - Skill::Status execute(const aron::data::DictPtr& data, const CallbackT& callback = [](const aron::data::DictPtr& returnValue) { (void) returnValue; }) override; + Skill::Status main(const aron::data::DictPtr& data, const CallbackT& callback = [](const aron::data::DictPtr& returnValue) { (void) returnValue; }) override; private: FunT fun; -- GitLab