Gazebo Common
API Reference
6.0.1
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-common
include
gz
common
include/gz/common/Util.hh
Go to the documentation of this file.
1
/*
2
* Copyright (C) 2016 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
#ifndef GZ_COMMON_UTIL_HH_
18
#define GZ_COMMON_UTIL_HH_
19
20
#include <cassert>
21
#include <chrono>
22
#include <future>
23
#include <memory>
24
#include <string>
25
#include <thread>
26
#include <vector>
27
28
#include <gz/common/Export.hh>
29
#include <
gz/common/Filesystem.hh
>
30
#include <
gz/common/SystemPaths.hh
>
31
#include <
gz/common/URI.hh
>
32
34
// Defines
35
36
#ifdef _WIN32
37
# define GZ_HOMEDIR "USERPROFILE"
38
#else
39
# define GZ_HOMEDIR "HOME"
40
#endif
41
43
#define GZ_NANO_TO_SEC 1e-9
44
46
#define GZ_SEC_TO_NANO 1000000000
47
49
#define GZ_MS_TO_NANO 1000000
50
52
#define GZ_US_TO_NANO 1000
53
55
#define GZ_SPEED_OF_LIGHT = 299792458.0
56
58
#define GZ_SLEEP_S(_s) (std::this_thread::sleep_for(\
59
std::chrono::seconds(_s)))
60
62
#define GZ_SLEEP_US(_us) (std::this_thread::sleep_for(\
63
std::chrono::microseconds(_us)))
64
66
#define GZ_SLEEP_MS(_ms) (std::this_thread::sleep_for(\
67
std::chrono::milliseconds(_ms)))
68
70
#define GZ_SLEEP_NS(_ns) (std::this_thread::sleep_for(\
71
std::chrono::nanoseconds(_ns)))
72
74
#define GZ_SYSTEM_TIME() (std::chrono::system_clock::now())
75
77
#define GZ_SYSTEM_TIME_S() (std::chrono::duration_cast<std::chrono::seconds>(\
78
std::chrono::system_clock::now().time_since_epoch()).count())
79
81
#define GZ_SYSTEM_TIME_US() (\
82
std::chrono::duration_cast<std::chrono::microseconds>(\
83
std::chrono::system_clock::now().time_since_epoch()).count())
84
86
#define GZ_SYSTEM_TIME_MS() (\
87
std::chrono::duration_cast<std::chrono::milliseconds>(\
88
std::chrono::system_clock::now().time_since_epoch()).count())
89
91
#define GZ_SYSTEM_TIME_NS() (\
92
std::chrono::duration_cast<std::chrono::nanoseconds>(\
93
std::chrono::system_clock::now().time_since_epoch()).count())
94
97
#define GZ_ASSERT(_expr, _msg) assert((_msg, _expr))
98
100
namespace
gz
101
{
102
namespace
common
103
{
105
enum
NodeTransformType
{
TRANSLATE
,
ROTATE
,
SCALE
,
MATRIX
};
106
108
typedef
std::runtime_error
exception
;
109
115
std::string
GZ_COMMON_VISIBLE
systemTimeISO
();
116
119
std::string
GZ_COMMON_VISIBLE
systemTimeIso
();
120
125
std::string
GZ_COMMON_VISIBLE
timeToIso
(
126
const
std::chrono::time_point<std::chrono::system_clock>
&_time);
127
130
std::string
GZ_COMMON_VISIBLE
logPath
();
131
134
void
GZ_COMMON_VISIBLE
addSearchPathSuffix
(
135
const
std::string
&_suffix);
136
140
std::string
GZ_COMMON_VISIBLE
findFile
(
const
std::string
&_file);
141
147
std::string
GZ_COMMON_VISIBLE
findFile
(
const
std::string
&_file,
148
bool
_searchLocalPath);
149
153
std::string
GZ_COMMON_VISIBLE
findFilePath
(
const
std::string
&_file);
154
163
void
GZ_COMMON_VISIBLE
addFindFileURICallback
(
164
std::function
<
std::string
(
const
URI
&)> _cb);
165
172
common::SystemPaths
GZ_COMMON_VISIBLE *
systemPaths
();
173
178
template
<
typename
T>
179
std::string
sha1
(
const
T &_buffer);
180
187
std::string
GZ_COMMON_VISIBLE
sha1
(
188
void
const
*_buffer,
std::size_t
_byteCount);
189
194
constexpr
uint64_t GZ_COMMON_VISIBLE
hash64
(std::string_view _key)
195
{
196
const
char
*data = _key.data();
197
const
auto
len = _key.size();
198
const
uint64_t prime = 0x100000001b3;
199
uint64_t hash = 0xcbf29ce484222325;
200
201
for
(
auto
i = 0u; i < len; ++i)
202
{
203
uint8_t value =
static_cast<
uint8_t
>
(data[i]);
204
hash = hash ^ value;
205
hash *= prime;
206
}
207
208
return
hash;
209
}
210
218
bool
GZ_COMMON_VISIBLE
env
(
219
const
std::string
&_name,
std::string
&_value);
220
227
bool
GZ_COMMON_VISIBLE
env
(
228
const
std::string
&_name,
std::string
&_value,
229
bool
_allowEmpty);
230
239
bool
GZ_COMMON_VISIBLE
setenv
(
240
const
std::string
&_name,
const
std::string
&_value);
241
245
bool
GZ_COMMON_VISIBLE
unsetenv
(
const
std::string
&_name);
246
249
std::string
GZ_COMMON_VISIBLE
uuid
();
250
255
std::vector<std::string>
GZ_COMMON_VISIBLE
split
(
256
const
std::string
&_str,
const
std::string
&_delim);
257
260
void
GZ_COMMON_VISIBLE
ltrim
(
std::string
&_s);
261
264
void
GZ_COMMON_VISIBLE
rtrim
(
std::string
&_s);
265
268
void
GZ_COMMON_VISIBLE
trim
(
std::string
&_s);
269
273
std::string
GZ_COMMON_VISIBLE
ltrimmed
(
std::string
_s);
274
278
std::string
GZ_COMMON_VISIBLE
rtrimmed
(
std::string
_s);
279
283
std::string
GZ_COMMON_VISIBLE
trimmed
(
std::string
_s);
284
288
std::string
GZ_COMMON_VISIBLE
lowercase
(
const
std::string
&_in);
289
293
std::string
GZ_COMMON_VISIBLE
lowercase
(
const
char
*_in);
294
303
void
GZ_COMMON_VISIBLE
replaceAll
(
std::string
&_result,
304
const
std::string
&_orig,
305
const
std::string
&_key,
306
const
std::string
&_replacement);
307
316
std::string
GZ_COMMON_VISIBLE
replaceAll
(
const
std::string
&_orig,
317
const
std::string
&_key,
318
const
std::string
&_replacement);
319
}
320
}
321
323
// Implementation of get_sha1
324
template
<
typename
T>
325
std::string
gz::common::sha1
(
const
T &_buffer)
326
{
327
if
(_buffer.size() == 0)
328
return
gz::common::sha1
(NULL, 0);
329
else
330
{
331
return
gz::common::sha1
(
332
&(_buffer[0]), _buffer.size() *
sizeof
(_buffer[0]));
333
}
334
}
335
#endif