Types.hh
Go to the documentation of this file.
1 /*
2  * Copyright 2011 Nate Koenig
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 SDFORMAT_TYPES_HH_
18 #define SDFORMAT_TYPES_HH_
19 
20 #include <algorithm>
21 #include <cmath>
22 #include <cstdint>
23 #include <sstream>
24 #include <string>
25 #include <utility>
26 #include <vector>
27 
28 #include <sdf/sdf_config.h>
29 #include "sdf/system_util.hh"
30 #include "sdf/Error.hh"
31 
32 #if defined(__GNUC__) || defined(__clang__)
33 #define SDF_DEPRECATED(version) __attribute__((deprecated))
34 #define SDF_FORCEINLINE __attribute__((always_inline))
35 #elif defined(_MSC_VER)
36 #define SDF_DEPRECATED(version)
37 #define SDF_FORCEINLINE __forceinline
38 #else
39 #define SDF_DEPRECATED(version)
40 #define SDF_FORCEINLINE
41 #endif
42 
43 #if defined(__GNUC__)
44 # define SDF_SUPPRESS_DEPRECATED_BEGIN \
45  _Pragma("GCC diagnostic push") \
46  _Pragma("GCC diagnostic ignored \"-Wdeprecated-declarations\"")
47 # define SDF_SUPPRESS_DEPRECATED_END _Pragma("GCC diagnostic pop")
48 #elif defined(__clang__)
49 # define SDF_SUPPRESS_DEPRECATED_BEGIN \
50  _Pragma("clang diagnostic push") \
51  _Pragma("clang diagnostic ignored \"-Wdeprecated-declarations\"")
52 # define SDF_SUPPRESS_DEPRECATED_END _Pragma("clang diagnostic pop")
53 #else
54 # define SDF_SUPPRESS_DEPRECATED_BEGIN
55 # define SDF_SUPPRESS_DEPRECATED_END
56 #endif
57 
58 namespace sdf
59 {
60  // Inline bracket to help doxygen filtering.
61  inline namespace SDF_VERSION_NAMESPACE {
62  //
63 
64  const std::string kSdfScopeDelimiter = "::";
65 
68  constexpr char kSdfStringSource[] = "data-string";
69 
72  constexpr char kUrdfStringSource[] = "urdf string";
73 
79  std::vector<std::string> split(const std::string &_str,
80  const std::string &_splitter);
81 
86  std::string trim(const char *_in);
87 
92  std::string trim(const std::string &_in);
93 
98  template<typename T>
99  inline bool equal(const T &_a, const T &_b,
100  const T &_epsilon = 1e-6f)
101  {
102  return std::fabs(_a - _b) <= _epsilon;
103  }
104 
106  using Errors = std::vector<Error>;
107 
112  SDFORMAT_VISIBLE std::ostream &operator<<(
113  std::ostream &_out, const sdf::Errors &_errs);
114 
117  {
124  public: Color(float _r = 0.0f, float _g = 0.0f,
125  float _b = 0.0f, float _a = 1.0f) SDF_DEPRECATED(6.0)
126  : r(_r), g(_g), b(_b), a(_a)
127  {}
128 
133  public: friend std::ostream &operator<< (std::ostream &_out,
134  const Color &_pt)
135  {
136  _out << _pt.r << " " << _pt.g << " " << _pt.b << " " << _pt.a;
137  return _out;
138  }
139 
143  public: friend std::istream &operator>> (std::istream &_in, Color &_pt)
144  {
145  // Skip white spaces
146  _in.setf(std::ios_base::skipws);
147  _in >> _pt.r >> _pt.g >> _pt.b >> _pt.a;
148  return _in;
149  }
150 
154  public: bool operator ==(const Color &_clr) const
155  {
156  return equal(this->r, _clr.r) &&
157  equal(this->g, _clr.g) &&
158  equal(this->b, _clr.b) &&
159  equal(this->a, _clr.a);
160  }
161 
163  public: float r;
164 
166  public: float g;
167 
169  public: float b;
170 
172  public: float a;
173  };
174 
178  {
180  public: Time()
181  : sec(0), nsec(0)
182  {
183  }
184 
188  public: Time(int32_t _sec, int32_t _nsec)
189  : sec(_sec), nsec(_nsec)
190  {
191  }
192 
197  public: friend std::ostream &operator<<(std::ostream &_out,
198  const Time &_time)
199  {
200  _out << _time.sec << " " << _time.nsec;
201  return _out;
202  }
203 
208  public: friend std::istream &operator>>(std::istream &_in,
209  Time &_time)
210  {
211  // Skip white spaces
212  _in.setf(std::ios_base::skipws);
213  _in >> _time.sec >> _time.nsec;
214  return _in;
215  }
216 
220  public: bool operator ==(const Time &_time) const
221  {
222  return this->sec == _time.sec && this->nsec == _time.nsec;
223  }
224 
226  public: int32_t sec;
227 
229  public: int32_t nsec;
230  };
231 
234  {
235  public: double mass;
236  };
237 
241  std::string SDFORMAT_VISIBLE lowercase(const std::string &_in);
242 
248  std::pair<std::string, std::string> SplitName(
249  const std::string &_absoluteName);
250 
257  std::string JoinName(
258  const std::string &_scopeName, const std::string &_localName);
259  }
260 }
261 #endif
sdf::v11::Time::sec
int32_t sec
Seconds.
Definition: Types.hh:226
sdf::v11::Time::Time
Time(int32_t _sec, int32_t _nsec)
Constructor.
Definition: Types.hh:188
Error.hh
sdf::v11::kUrdfStringSource
constexpr char kUrdfStringSource[]
The source path replacement if the urdf was parsed from a string, instead of a file.
Definition: Types.hh:72
sdf::v11::equal
bool equal(const T &_a, const T &_b, const T &_epsilon=1e-6f)
check if two values are equal, within a tolerance
Definition: Types.hh:99
sdf
namespace for Simulation Description Format parser
Definition: Actor.hh:33
sdf::v11::kSdfStringSource
constexpr char kSdfStringSource[]
The source path replacement if it was parsed from a string, instead of a file.
Definition: Types.hh:68
sdf::v11::Color
Defines a color.
Definition: Types.hh:116
sdf::v11::kSdfScopeDelimiter
const std::string kSdfScopeDelimiter
Definition: Types.hh:64
sdf::v11::Time::operator>>
friend std::istream & operator>>(std::istream &_in, Time &_time)
Stream extraction operator.
Definition: Types.hh:208
SDF_DEPRECATED
#define SDF_DEPRECATED(version)
Definition: Types.hh:39
sdf::v11::Inertia
A class for inertial information about a link.
Definition: Types.hh:233
sdf::v11::Time::nsec
int32_t nsec
Nanoseconds.
Definition: Types.hh:229
sdf::v11::Time::Time
Time()
Constructor.
Definition: Types.hh:180
SDFORMAT_VISIBLE
#define SDFORMAT_VISIBLE
Definition: system_util.hh:41
sdf::v11::Color::r
float r
Red value.
Definition: Types.hh:163
sdf::v11::Color::Color
Color(float _r=0.0f, float _g=0.0f, float _b=0.0f, float _a=1.0f)
Constructor.
Definition: Types.hh:124
sdf::v11::split
SDFORMAT_VISIBLE std::vector< std::string > split(const std::string &_str, const std::string &_splitter)
Split a string using the delimiter in splitter.
sdf::v11::lowercase
std::string SDFORMAT_VISIBLE lowercase(const std::string &_in)
Transforms a string to its lowercase equivalent.
sdf::v11::Time
A Time class, can be used to hold wall- or sim-time.
Definition: Types.hh:177
sdf::v11::Color::b
float b
Blue value.
Definition: Types.hh:169
sdf::v11::Color::a
float a
Alpha value.
Definition: Types.hh:172
sdf::v11::Inertia::mass
double mass
Definition: Types.hh:235
sdf::v11::trim
SDFORMAT_VISIBLE std::string trim(const char *_in)
Trim leading and trailing whitespace from a string.
sdf::v11::Color::g
float g
Green value.
Definition: Types.hh:166
system_util.hh
sdf::v11::operator<<
std::ostream & operator<<(std::ostream &os, ParamStreamer< T > s)
Definition: Param.hh:78
sdf::v11::SplitName
SDFORMAT_VISIBLE std::pair< std::string, std::string > SplitName(const std::string &_absoluteName)
Split a name into a two strings based on the '::' delimeter.
sdf::v11::JoinName
SDFORMAT_VISIBLE std::string JoinName(const std::string &_scopeName, const std::string &_localName)
Join two strings with the '::' delimiter.
sdf::v11::Errors
std::vector< Error > Errors
A vector of Error.
Definition: Types.hh:106
sdf::v11::Time::operator<<
friend std::ostream & operator<<(std::ostream &_out, const Time &_time)
Stream insertion operator.
Definition: Types.hh:197