Descriptor.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 <map>
27
#include <string>
28
#include <typeinfo>
29
30
#include <RobotAPI/interface/aron.h>
31
32
namespace
armarx::aron::conversion::util
33
{
34
template
<
class
T1,
class
T2>
35
std::map<T2, T1>
36
InvertMap
(
const
std::map<T1, T2>& m)
37
{
38
std::map<T2, T1> ret;
39
for
(
const
auto
& [key, val] : m)
40
{
41
ret.emplace(val, key);
42
}
43
return
ret;
44
}
45
46
template
<
class
T>
47
std::map<T, std::string>
48
InvertMap
(
const
std::map<std::string, T>& m)
49
{
50
return
InvertMap<std::string, T>
(m);
51
}
52
53
template
<
class
T>
54
std::map<std::string, T>
55
InvertMap
(
const
std::map<T, std::string>& m)
56
{
57
return
InvertMap<T, std::string>
(m);
58
}
59
}
// namespace armarx::aron::conversion::util
60
61
namespace
armarx::aron::type
62
{
63
const
std::vector<type::Maybe>
AllMaybeTypes
= {type::Maybe::NONE,
64
type::Maybe::OPTIONAL,
65
type::Maybe::RAW_PTR,
66
type::Maybe::SHARED_PTR,
67
type::Maybe::UNIQUE_PTR};
68
69
enum class
Descriptor
70
{
71
LIST
,
72
OBJECT
,
73
TUPLE
,
74
PAIR
,
75
DICT
,
76
NDARRAY
,
77
MATRIX
,
78
QUATERNION
,
79
POINTCLOUD
,
80
IMAGE
,
81
INT_ENUM
,
82
INT
,
83
LONG
,
84
FLOAT
,
85
DOUBLE
,
86
BOOL
,
87
STRING
,
88
ANY_OBJECT
,
89
UNKNOWN
= -1
90
};
91
92
const
std::vector<type::Descriptor>
AllDescriptors
= {
Descriptor::LIST
,
93
Descriptor::OBJECT
,
94
Descriptor::TUPLE
,
95
Descriptor::PAIR
,
96
Descriptor::DICT
,
97
Descriptor::NDARRAY
,
98
Descriptor::MATRIX
,
99
Descriptor::QUATERNION
,
100
Descriptor::POINTCLOUD
,
101
Descriptor::IMAGE
,
102
Descriptor::INT_ENUM
,
103
Descriptor::INT
,
104
Descriptor::LONG
,
105
Descriptor::FLOAT
,
106
Descriptor::DOUBLE
,
107
Descriptor::BOOL
,
108
Descriptor::STRING
,
109
Descriptor::ANY_OBJECT
,
110
Descriptor::UNKNOWN
};
111
112
namespace
defaultconversion::string
113
{
114
// Maybe
115
const
std::map<type::Maybe, std::string>
Maybe2String
= {
116
{Maybe::NONE,
"armarx::aron::type::Maybe::NONE"
},
117
{Maybe::RAW_PTR,
"armarx::aron::type::Maybe::RAW_PTR"
},
118
{Maybe::SHARED_PTR,
"armarx::aron::type::Maybe::SHARED_PTR"
},
119
{Maybe::UNIQUE_PTR,
"armarx::aron::type::Maybe::UNIQUE_PTR"
},
120
{Maybe::OPTIONAL,
"armarx::aron::type::Maybe::OPTIONAL"
}};
121
122
// Descriptor
123
const
std::map<type::Descriptor, std::string>
Descriptor2String
= {
124
{
Descriptor::LIST
,
"armarx::aron::type::Descriptor::LIST"
},
125
{
Descriptor::OBJECT
,
"armarx::aron::type::Descriptor::OBJECT"
},
126
{
Descriptor::DICT
,
"armarx::aron::type::Descriptor::DICT"
},
127
{
Descriptor::PAIR
,
"armarx::aron::type::Descriptor::PAIR"
},
128
{
Descriptor::TUPLE
,
"armarx::aron::type::Descriptor::TUPLE"
},
129
{
Descriptor::NDARRAY
,
"armarx::aron::type::Descriptor::NDARRAY"
},
130
{
Descriptor::MATRIX
,
"armarx::aron::type::Descriptor::MATRIX"
},
131
{
Descriptor::QUATERNION
,
"armarx::aron::type::Descriptor::QUATERNION"
},
132
{
Descriptor::IMAGE
,
"armarx::aron::type::Descriptor::IMAGE"
},
133
{
Descriptor::POINTCLOUD
,
"armarx::aron::type::Descriptor::POINTCLOUD"
},
134
{
Descriptor::NDARRAY
,
"armarx::aron::type::Descriptor::NDARRAY"
},
135
{
Descriptor::INT_ENUM
,
"armarx::aron::type::Descriptor::INT_ENUM"
},
136
{
Descriptor::INT
,
"armarx::aron::type::Descriptor::INT"
},
137
{
Descriptor::LONG
,
"armarx::aron::type::Descriptor::LONG"
},
138
{
Descriptor::FLOAT
,
"armarx::aron::type::Descriptor::FLOAT"
},
139
{
Descriptor::DOUBLE
,
"armarx::aron::type::Descriptor::DOUBLE"
},
140
{
Descriptor::BOOL
,
"armarx::aron::type::Descriptor::BOOL"
},
141
{
Descriptor::STRING
,
"armarx::aron::type::Descriptor::STRING"
},
142
{
Descriptor::ANY_OBJECT
,
"armarx::aron::type::Descriptor::ANY_OBJECT"
},
143
{
Descriptor::UNKNOWN
,
"armarx::aron::type::Descriptor::UNKNOWN"
}};
144
}
// namespace defaultconversion::string
145
146
namespace
defaultconversion::typeinfo
147
{
148
// hash type
149
const
std::map<size_t, Descriptor>
TypeId2Descriptor
= {
150
{
typeid
(aron::type::dto::List).hash_code(),
Descriptor::LIST
},
151
{
typeid
(aron::type::dto::AronObject).hash_code(),
Descriptor::OBJECT
},
152
{
typeid
(aron::type::dto::Tuple).hash_code(),
Descriptor::TUPLE
},
153
{
typeid
(aron::type::dto::Pair).hash_code(),
Descriptor::PAIR
},
154
{
typeid
(aron::type::dto::Dict).hash_code(),
Descriptor::DICT
},
155
{
typeid
(aron::type::dto::NDArray).hash_code(),
Descriptor::NDARRAY
},
156
{
typeid
(aron::type::dto::Matrix).hash_code(),
Descriptor::MATRIX
},
157
{
typeid
(aron::type::dto::Quaternion).hash_code(),
Descriptor::QUATERNION
},
158
{
typeid
(aron::type::dto::PointCloud).hash_code(),
Descriptor::POINTCLOUD
},
159
{
typeid
(aron::type::dto::Image).hash_code(),
Descriptor::IMAGE
},
160
{
typeid
(aron::type::dto::IntEnum).hash_code(),
Descriptor::INT_ENUM
},
161
{
typeid
(aron::type::dto::AronInt).hash_code(),
Descriptor::INT
},
162
{
typeid
(aron::type::dto::AronLong).hash_code(),
Descriptor::LONG
},
163
{
typeid
(aron::type::dto::AronFloat).hash_code(),
Descriptor::FLOAT
},
164
{
typeid
(aron::type::dto::AronDouble).hash_code(),
Descriptor::DOUBLE
},
165
{
typeid
(aron::type::dto::AronString).hash_code(),
Descriptor::STRING
},
166
{
typeid
(aron::type::dto::AronBool).hash_code(),
Descriptor::BOOL
},
167
{
typeid
(aron::type::dto::AnyObject).hash_code(),
Descriptor::ANY_OBJECT
}};
168
}
// namespace defaultconversion::typeinfo
169
170
inline
type::Descriptor
171
Aron2Descriptor
(
const
type::dto::GenericType& t)
172
{
173
return
defaultconversion::typeinfo::TypeId2Descriptor
.at(
typeid
(t).hash_code());
174
}
175
}
// namespace armarx::aron::type
176
177
namespace
armarx::aron::data
178
{
179
enum class
Descriptor
180
{
181
LIST
,
182
DICT
,
183
NDARRAY
,
184
INT
,
185
LONG
,
186
FLOAT
,
187
DOUBLE
,
188
STRING
,
189
BOOL
,
190
UNKNOWN
= -1
191
};
192
193
const
std::vector<data::Descriptor>
AllDescriptors
= {
Descriptor::LIST
,
194
Descriptor::DICT
,
195
Descriptor::NDARRAY
,
196
Descriptor::INT
,
197
Descriptor::LONG
,
198
Descriptor::FLOAT
,
199
Descriptor::DOUBLE
,
200
Descriptor::STRING
,
201
Descriptor::BOOL
,
202
Descriptor::UNKNOWN
};
203
204
namespace
defaultconversion::string
205
{
206
// Descriptor
207
const
std::map<data::Descriptor, std::string>
Descriptor2String
= {
208
{
Descriptor::LIST
,
"armarx::aron::data::Descriptor::LIST"
},
209
{
Descriptor::DICT
,
"armarx::aron::data::Descriptor::DICT"
},
210
{
Descriptor::NDARRAY
,
"armarx::aron::data::Descriptor::NDARRAY"
},
211
{
Descriptor::INT
,
"armarx::aron::data::Descriptor::INT"
},
212
{
Descriptor::LONG
,
"armarx::aron::data::Descriptor::LONG"
},
213
{
Descriptor::FLOAT
,
"armarx::aron::data::Descriptor::FLOAT"
},
214
{
Descriptor::DOUBLE
,
"armarx::aron::data::Descriptor::DOUBLE"
},
215
{
Descriptor::STRING
,
"armarx::aron::data::Descriptor::STRING"
},
216
{
Descriptor::BOOL
,
"armarx::aron::data::Descriptor::BOOL"
},
217
{
Descriptor::UNKNOWN
,
"armarx::aron::data::Descriptor::UNKNOWN"
}};
218
}
// namespace defaultconversion::string
219
220
namespace
defaultconversion::typeinfo
221
{
222
// TypeID
223
const
std::map<size_t, Descriptor>
TypeId2Descriptor
= {
224
{
typeid
(aron::data::dto::List).hash_code(),
Descriptor::LIST
},
225
{
typeid
(aron::data::dto::Dict).hash_code(),
Descriptor::DICT
},
226
{
typeid
(aron::data::dto::NDArray).hash_code(),
Descriptor::NDARRAY
},
227
{
typeid
(aron::data::dto::AronInt).hash_code(),
Descriptor::INT
},
228
{
typeid
(aron::data::dto::AronFloat).hash_code(),
Descriptor::FLOAT
},
229
{
typeid
(aron::data::dto::AronLong).hash_code(),
Descriptor::LONG
},
230
{
typeid
(aron::data::dto::AronDouble).hash_code(),
Descriptor::DOUBLE
},
231
{
typeid
(aron::data::dto::AronString).hash_code(),
Descriptor::STRING
},
232
{
typeid
(aron::data::dto::AronBool).hash_code(),
Descriptor::BOOL
},
233
};
234
}
// namespace defaultconversion::typeinfo
235
236
inline
data::Descriptor
237
Aron2Descriptor
(
const
data::dto::GenericData& t)
238
{
239
return
defaultconversion::typeinfo::TypeId2Descriptor
.at(
typeid
(t).hash_code());
240
}
241
242
namespace
defaultconversion
243
{
244
// Useful if data is present but no type information. Try to infer type from data.
245
const
std::map<Descriptor, aron::type::Descriptor>
Data2TypeDescriptor
= {
246
{
Descriptor::LIST
,
aron::type::Descriptor::LIST
},
247
{
Descriptor::DICT
,
aron::type::Descriptor::DICT
},
248
{
Descriptor::NDARRAY
,
aron::type::Descriptor::NDARRAY
},
249
{
Descriptor::INT
,
aron::type::Descriptor::INT
},
250
{
Descriptor::FLOAT
,
aron::type::Descriptor::FLOAT
},
251
{
Descriptor::LONG
,
aron::type::Descriptor::LONG
},
252
{
Descriptor::DOUBLE
,
aron::type::Descriptor::DOUBLE
},
253
{
Descriptor::STRING
,
aron::type::Descriptor::STRING
},
254
{
Descriptor::BOOL
,
aron::type::Descriptor::BOOL
},
255
{
Descriptor::UNKNOWN
,
aron::type::Descriptor::UNKNOWN
}};
256
257
const
std::map<aron::type::Descriptor, Descriptor>
Type2DataDescriptor
= {
258
// containers
259
{
aron::type::Descriptor::LIST
,
Descriptor::LIST
},
260
{
aron::type::Descriptor::OBJECT
,
Descriptor::DICT
},
261
{
aron::type::Descriptor::TUPLE
,
Descriptor::LIST
},
262
{
aron::type::Descriptor::PAIR
,
Descriptor::LIST
},
263
{
aron::type::Descriptor::DICT
,
Descriptor::DICT
},
264
265
// everything which gets an ndarray
266
{
aron::type::Descriptor::NDARRAY
,
Descriptor::NDARRAY
},
267
{
aron::type::Descriptor::MATRIX
,
Descriptor::NDARRAY
},
268
{
aron::type::Descriptor::QUATERNION
,
Descriptor::NDARRAY
},
269
{
aron::type::Descriptor::POINTCLOUD
,
Descriptor::NDARRAY
},
270
{
aron::type::Descriptor::IMAGE
,
Descriptor::NDARRAY
},
271
272
// enums
273
{
aron::type::Descriptor::INT_ENUM
,
Descriptor::INT
},
274
275
// primitives
276
{
aron::type::Descriptor::INT
,
Descriptor::INT
},
277
{
aron::type::Descriptor::LONG
,
Descriptor::LONG
},
278
{
aron::type::Descriptor::FLOAT
,
Descriptor::FLOAT
},
279
{
aron::type::Descriptor::DOUBLE
,
Descriptor::DOUBLE
},
280
{
aron::type::Descriptor::STRING
,
Descriptor::STRING
},
281
{
aron::type::Descriptor::BOOL
,
Descriptor::BOOL
},
282
{
aron::type::Descriptor::UNKNOWN
,
Descriptor::UNKNOWN
},
283
};
284
}
// namespace defaultconversion
285
}
// namespace armarx::aron::data
armarx::aron::conversion::util
Definition
Descriptor.h:33
armarx::aron::conversion::util::InvertMap
std::map< T2, T1 > InvertMap(const std::map< T1, T2 > &m)
Definition
Descriptor.h:36
armarx::aron::data::defaultconversion::string
Definition
Descriptor.h:205
armarx::aron::data::defaultconversion::string::Descriptor2String
const std::map< data::Descriptor, std::string > Descriptor2String
Definition
Descriptor.h:207
armarx::aron::data::defaultconversion::typeinfo
Definition
Descriptor.h:221
armarx::aron::data::defaultconversion::typeinfo::TypeId2Descriptor
const std::map< size_t, Descriptor > TypeId2Descriptor
Definition
Descriptor.h:223
armarx::aron::data::defaultconversion::Data2TypeDescriptor
const std::map< Descriptor, aron::type::Descriptor > Data2TypeDescriptor
Definition
Descriptor.h:245
armarx::aron::data::defaultconversion::Type2DataDescriptor
const std::map< aron::type::Descriptor, Descriptor > Type2DataDescriptor
Definition
Descriptor.h:257
armarx::aron::data
A convenience header to include all aron files (full include, not forward declared)
Definition
aron_conversions.cpp:4
armarx::aron::data::Aron2Descriptor
data::Descriptor Aron2Descriptor(const data::dto::GenericData &t)
Definition
Descriptor.h:237
armarx::aron::data::Descriptor
Descriptor
Definition
Descriptor.h:180
armarx::aron::data::Descriptor::LIST
@ LIST
Definition
Descriptor.h:181
armarx::aron::data::Descriptor::INT
@ INT
Definition
Descriptor.h:184
armarx::aron::data::Descriptor::STRING
@ STRING
Definition
Descriptor.h:188
armarx::aron::data::Descriptor::UNKNOWN
@ UNKNOWN
Definition
Descriptor.h:190
armarx::aron::data::Descriptor::BOOL
@ BOOL
Definition
Descriptor.h:189
armarx::aron::data::Descriptor::LONG
@ LONG
Definition
Descriptor.h:185
armarx::aron::data::Descriptor::DICT
@ DICT
Definition
Descriptor.h:182
armarx::aron::data::Descriptor::NDARRAY
@ NDARRAY
Definition
Descriptor.h:183
armarx::aron::data::Descriptor::FLOAT
@ FLOAT
Definition
Descriptor.h:186
armarx::aron::data::Descriptor::DOUBLE
@ DOUBLE
Definition
Descriptor.h:187
armarx::aron::data::AllDescriptors
const std::vector< data::Descriptor > AllDescriptors
Definition
Descriptor.h:193
armarx::aron::type::defaultconversion::string
Definition
Descriptor.h:113
armarx::aron::type::defaultconversion::string::Maybe2String
const std::map< type::Maybe, std::string > Maybe2String
Definition
Descriptor.h:115
armarx::aron::type::defaultconversion::string::Descriptor2String
const std::map< type::Descriptor, std::string > Descriptor2String
Definition
Descriptor.h:123
armarx::aron::type::defaultconversion::typeinfo
Definition
Descriptor.h:147
armarx::aron::type::defaultconversion::typeinfo::TypeId2Descriptor
const std::map< size_t, Descriptor > TypeId2Descriptor
Definition
Descriptor.h:149
armarx::aron::type
A convenience header to include all aron files (full include, not forward declared)
Definition
aron_conversions.cpp:10
armarx::aron::type::AllDescriptors
const std::vector< type::Descriptor > AllDescriptors
Definition
Descriptor.h:92
armarx::aron::type::Aron2Descriptor
type::Descriptor Aron2Descriptor(const type::dto::GenericType &t)
Definition
Descriptor.h:171
armarx::aron::type::AllMaybeTypes
const std::vector< type::Maybe > AllMaybeTypes
Definition
Descriptor.h:63
armarx::aron::type::Descriptor
Descriptor
Definition
Descriptor.h:70
armarx::aron::type::Descriptor::IMAGE
@ IMAGE
Definition
Descriptor.h:80
armarx::aron::type::Descriptor::LIST
@ LIST
Definition
Descriptor.h:71
armarx::aron::type::Descriptor::MATRIX
@ MATRIX
Definition
Descriptor.h:77
armarx::aron::type::Descriptor::QUATERNION
@ QUATERNION
Definition
Descriptor.h:78
armarx::aron::type::Descriptor::INT
@ INT
Definition
Descriptor.h:82
armarx::aron::type::Descriptor::PAIR
@ PAIR
Definition
Descriptor.h:74
armarx::aron::type::Descriptor::TUPLE
@ TUPLE
Definition
Descriptor.h:73
armarx::aron::type::Descriptor::STRING
@ STRING
Definition
Descriptor.h:87
armarx::aron::type::Descriptor::UNKNOWN
@ UNKNOWN
Definition
Descriptor.h:89
armarx::aron::type::Descriptor::INT_ENUM
@ INT_ENUM
Definition
Descriptor.h:81
armarx::aron::type::Descriptor::OBJECT
@ OBJECT
Definition
Descriptor.h:72
armarx::aron::type::Descriptor::POINTCLOUD
@ POINTCLOUD
Definition
Descriptor.h:79
armarx::aron::type::Descriptor::BOOL
@ BOOL
Definition
Descriptor.h:86
armarx::aron::type::Descriptor::LONG
@ LONG
Definition
Descriptor.h:83
armarx::aron::type::Descriptor::DICT
@ DICT
Definition
Descriptor.h:75
armarx::aron::type::Descriptor::NDARRAY
@ NDARRAY
Definition
Descriptor.h:76
armarx::aron::type::Descriptor::FLOAT
@ FLOAT
Definition
Descriptor.h:84
armarx::aron::type::Descriptor::ANY_OBJECT
@ ANY_OBJECT
Definition
Descriptor.h:88
armarx::aron::type::Descriptor::DOUBLE
@ DOUBLE
Definition
Descriptor.h:85
RobotAPI
libraries
aron
core
Descriptor.h
Generated by
1.13.2