moveit2
The MoveIt Motion Planning Framework for ROS 2.
Loading...
Searching...
No Matches
lexical_casts.cpp
Go to the documentation of this file.
1/*********************************************************************
2 * Software License Agreement (BSD License)
3 *
4 * Copyright (c) 2018, isys vision, GmbH.
5 * All rights reserved.
6 *
7 * Redistribution and use in source and binary forms, with or without
8 * modification, are permitted provided that the following conditions
9 * are met:
10 *
11 * * Redistributions of source code must retain the above copyright
12 * notice, this list of conditions and the following disclaimer.
13 * * Redistributions in binary form must reproduce the above
14 * copyright notice, this list of conditions and the following
15 * disclaimer in the documentation and/or other materials provided
16 * with the distribution.
17 * * Neither the name of Willow Garage nor the names of its
18 * contributors may be used to endorse or promote products derived
19 * from this software without specific prior written permission.
20 *
21 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
22 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
23 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
24 * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
25 * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
26 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
27 * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
28 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
29 * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
30 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
31 * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
32 * POSSIBILITY OF SUCH DAMAGE.
33 *********************************************************************/
34
35/* Author: Simon Schmeisser */
36
38#include <locale>
39#include <sstream>
40
41namespace moveit
42{
43namespace core
44{
45template <class InType>
46std::string toStringImpl(InType t)
47{
48 // convert to string using no locale
49 std::ostringstream oss;
50 oss.imbue(std::locale::classic());
51 oss << t;
52 return oss.str();
53}
54
55std::string toString(double d)
56{
57 return toStringImpl(d);
58}
59
60std::string toString(float f)
61{
62 return toStringImpl(f);
63}
64
65template <class OutType>
66OutType toRealImpl(const std::string& s)
67{
68 // convert from string using no locale
69 std::istringstream stream(s);
70 stream.imbue(std::locale::classic());
71 OutType result;
72 stream >> result;
73 if (stream.fail() || !stream.eof())
74 {
75 throw std::runtime_error("Failed converting string to real number");
76 }
77 return result;
78}
79
80double toDouble(const std::string& s)
81{
82 return toRealImpl<double>(s);
83}
84
85float toFloat(const std::string& s)
86{
87 return toRealImpl<float>(s);
88}
89} // namespace core
90} // namespace moveit
locale-agnostic conversion functions from floating point numbers to strings
float toFloat(const std::string &s)
Converts a std::string to float using the classic C locale.
double toDouble(const std::string &s)
Converts a std::string to double using the classic C locale.
std::string toString(double d)
Convert a double to std::string using the classic C locale.
OutType toRealImpl(const std::string &s)
std::string toStringImpl(InType t)
Main namespace for MoveIt.
Definition exceptions.h:43