Gazebo Physics
API Reference
8.0.0
insert_drive_file
Tutorials
library_books
Classes
toc
Namespaces
insert_drive_file
Files
launch
Gazebo Website
Index
List
Hierarchy
Members: All
Members: Functions
Members: Variables
Members: Typedefs
Members: Enumerations
Members: Enumerator
List
Members
Functions
Typedefs
Variables
Enumerations
Enumerator
src
gz-physics
include
gz
physics
SpecifyData.hh
Go to the documentation of this file.
1
/*
2
* Copyright (C) 2017 Open Source Robotics Foundation
3
*
4
* Licensed under the Apache License, Version 2.0 (the "License");
5
* you may not use this file except in compliance with the License.
6
* You may obtain a copy of the License at
7
*
8
* http://www.apache.org/licenses/LICENSE-2.0
9
*
10
* Unless required by applicable law or agreed to in writing, software
11
* distributed under the License is distributed on an "AS IS" BASIS,
12
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
* See the License for the specific language governing permissions and
14
* limitations under the License.
15
*
16
*/
17
18
#ifndef GZ_PHYSICS_SPECIFYDATA_HH_
19
#define GZ_PHYSICS_SPECIFYDATA_HH_
20
21
#include "gz/physics/detail/PrivateSpecifyData.hh"
22
23
namespace
gz
24
{
25
namespace
physics
26
{
45
template
<
typename
Expected>
46
class
ExpectData<Expected> :
public
virtual
CompositeData
47
{
49
public
:
ExpectData
();
50
58
public
:
ExpectData
(
const
ExpectData &_other);
59
61
public
: ExpectData&
operator=
(
const
ExpectData &_other) =
default
;
62
67
69
public
:
virtual
~ExpectData
() =
default
;
70
74
public
:
template
<
typename
Data>
75
Data &
Get
();
76
80
public
:
template
<
typename
Data,
typename
... Args>
81
InsertResult<Data>
InsertOrAssign
(Args&&... _args);
82
86
public
:
template
<
typename
Data,
typename
... Args>
87
InsertResult<Data>
Insert
(Args&&... _args);
88
92
public
:
template
<
typename
Data>
93
bool
Remove
();
94
98
public
:
template
<
typename
Data>
99
Data *
Query
(
const
QueryMode
_mode = QueryMode::NORMAL);
100
103
public
:
template
<
typename
Data>
104
const
Data *
Query
(
const
QueryMode
_mode = QueryMode::NORMAL)
const
;
105
109
public
:
template
<
typename
Data>
110
bool
Has
()
const
;
111
115
public
:
template
<
typename
Data>
116
DataStatus
StatusOf
()
const
;
117
121
public
:
template
<
typename
Data>
122
bool
Unquery
()
const
;
123
127
public
:
template
<
typename
Data,
typename
... Args>
128
Data &
MakeRequired
(Args&&... _args);
129
134
public
:
template
<
typename
Data>
135
bool
Requires
()
const
;
136
140
public
:
template
<
typename
Data>
141
static
constexpr
bool
Expects
();
142
145
protected
: detail::PrivateExpectData<Expected>
privateExpectData
;
146
147
// This allows outside users to identify this expected data type at
148
// compile time, which can be useful for doing template metaprogramming.
149
public
:
using
Specification
= ExpectData<Expected>;
150
public
:
using
ExpectedData
= Expected;
151
public
:
using
RequiredData
= void;
152
153
public
:
using
SubSpecification1
= void;
154
public
:
using
SubSpecification2
= void;
155
};
156
175
template
<
typename
Required>
176
class
RequireData<Required> :
public
virtual
ExpectData<Required>
177
{
178
// This allows outside users to identify this Required data type at
179
// compile time, which can be useful for doing template metaprogramming.
180
public
:
using
Specification
= RequireData<Required>;
181
public
:
using
RequiredData
= Required;
182
185
public
:
RequireData
();
186
188
public
:
virtual
~RequireData
() =
default
;
189
190
// Do not shadow the ExpectData<Required> implementation
191
using
ExpectData<Required>::Get;
192
199
public
:
template
<
typename
Data>
200
const
Data &
Get
()
const
;
201
204
public
:
template
<
typename
Data>
205
static
constexpr
bool
AlwaysRequires
();
206
209
protected
: detail::PrivateRequireData<Required>
privateRequireData
;
210
};
211
264
template
<
typename
... Specifications>
265
class
SpecifyData
;
266
267
268
// ----------------------- Utility Templates ----------------------------
269
278
template
<
typename
Specification>
279
constexpr
std::size_t
CountUpperLimitOfExpectedData
();
280
283
template
<
typename
Specification>
284
constexpr
std::size_t
CountUpperLimitOfRequiredData
();
285
290
template
<
typename
Specification,
template
<
typename
>
class
SpecFinder>
291
constexpr
std::size_t
CountUpperLimitOfSpecifiedData
();
292
293
298
template
<
typename
Specification>
299
struct
FindExpected
300
{
301
using
Data
=
typename
Specification::ExpectedData;
302
};
303
307
template
<>
308
struct
FindExpected
<void>
309
{
310
using
Data
= void;
311
};
312
313
318
template
<
typename
Specification>
319
struct
FindRequired
320
{
321
using
Data
=
typename
Specification::RequiredData;
322
};
323
327
template
<>
328
struct
FindRequired
<void>
329
{
330
using
Data
= void;
331
};
332
333
336
template
<
typename
Data,
typename
Specification>
337
struct
IsExpectedBy
:
std::integral_constant
<
338
bool, Specification::template Expects<Data>() > { };
339
343
template
<
typename
Data>
344
struct
IsExpectedBy
<Data, void> :
std::false_type
{ };
345
348
template
<
typename
Data,
typename
Specification>
349
struct
IsRequiredBy
:
std::integral_constant
<
350
bool, Specification::template AlwaysRequires<Data>() > { };
351
355
template
<
typename
Data>
356
struct
IsRequiredBy
<Data, void> :
std::false_type
{ };
357
}
358
}
359
360
#include "gz/physics/detail/SpecifyData.hh"
361
362
#endif