AronGeneratedObject.h
Go to the documentation of this file.
1/*
2 * This file is part of ArmarX.
3 *
4 * Copyright (C) 2012-2016, High Performance Humanoid Technologies (H2T),
5 * Karlsruhe Institute of Technology (KIT), all rights reserved.
6 *
7 * ArmarX is free software; you can redistribute it and/or modify
8 * it under the terms of the GNU General Public License version 2 as
9 * published by the Free Software Foundation.
10 *
11 * ArmarX is distributed in the hope that it will be useful, but
12 * WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 * GNU General Public License for more details.
15 *
16 * You should have received a copy of the GNU General Public License
17 * along with this program. If not, see <http://www.gnu.org/licenses/>.
18 *
19 * @author Fabian Peller-Konrad (fabian dot peller-konrad at kit dot edu)
20 * @copyright http://www.gnu.org/licenses/gpl-2.0.txt
21 * GNU General Public License
22 */
23
24#pragma once
25
26#include "AronGeneratedClass.h"
27
28namespace armarx::aron::cpp
29{
30
32 {
33 public:
35 virtual ~AronGeneratedObjectBase() = default;
36
37 /// Convert the current bo to an aron variant data dict
39
40 /// Convert the current bo to the ice representation of an aron variant data dict
42
43 /// Set all members of the current bo according to the aron variant data dict
44 virtual void fromAron(const armarx::aron::data::DictPtr& input) = 0;
45
46 /// Set all members of the current bo according to the ice representation of an aron variant data dict
47 virtual void fromAron(const armarx::aron::data::dto::DictPtr& input) = 0;
48 };
49
50 template <class Derived>
52 {
53 public:
55 virtual ~AronGeneratedObject() = default;
56
57 template <class T>
58 void
59 to(T& t) const
60 {
61 const Derived* d = dynamic_cast<const Derived*>(this);
62 if (d)
63 {
64 t.fromAron(*d);
65 }
66 }
67
68 template <class T>
69 void
70 from(const T& t)
71 {
72 Derived* d = dynamic_cast<Derived*>(this);
73 if (d)
74 {
75 t.toAron(*d);
76 }
77 }
78
79 template <class T>
80 void
81 to(T& t, void (*fromAron)(const Derived&, T&)) const
82 {
83 const Derived* d = dynamic_cast<const Derived*>(this);
84 if (d)
85 {
86 fromAron(*d, t);
87 }
88 }
89
90 template <class T>
91 void
92 from(const T& t, void (*toAron)(Derived&, const T&))
93 {
94 Derived* d = dynamic_cast<Derived*>(this);
95 if (d)
96 {
97 toAron(*d, t);
98 }
99 }
100 };
101
102 template <class T>
103 concept isAronGeneratedObject = std::is_base_of<AronGeneratedObjectBase, T>::value;
104} // namespace armarx::aron::cpp
105
107{
109
110 template <class Derived>
112} // namespace armarx::aron::codegenerator::cpp
virtual void fromAron(const armarx::aron::data::dto::DictPtr &input)=0
Set all members of the current bo according to the ice representation of an aron variant data dict.
virtual void fromAron(const armarx::aron::data::DictPtr &input)=0
Set all members of the current bo according to the aron variant data dict.
virtual armarx::aron::data::dto::DictPtr toAronDTO() const =0
Convert the current bo to the ice representation of an aron variant data dict.
virtual armarx::aron::data::DictPtr toAron() const =0
Convert the current bo to an aron variant data dict.
void to(T &t, void(*fromAron)(const Derived &, T &)) const
void from(const T &t, void(*toAron)(Derived &, const T &))
aron::cpp::AronGeneratedObject< Derived > AronGeneratedObject
aron::cpp::AronGeneratedObjectBase AronGeneratedObjectBase
::IceInternal::Handle< Dict > DictPtr
std::shared_ptr< Dict > DictPtr
Definition Dict.h:42