2 Copyright (C) 2014-2021 Carl Hetherington <cth@carlh.net>
4 This file is part of libdcp.
6 libdcp is free software; you can redistribute it and/or modify
7 it under the terms of the GNU General Public License as published by
8 the Free Software Foundation; either version 2 of the License, or
9 (at your option) any later version.
11 libdcp is distributed in the hope that it will be useful,
12 but 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.
16 You should have received a copy of the GNU General Public License
17 along with libdcp. If not, see <http://www.gnu.org/licenses/>.
19 In addition, as a special exception, the copyright holders give
20 permission to link the code of portions of this program with the
21 OpenSSL library under certain conditions as described in each
22 individual source file, and distribute linked combinations
25 You must obey the GNU General Public License in all respects
26 for all of the code used other than OpenSSL. If you modify
27 file(s) with this exception, you may extend this exception to your
28 version of the file(s), but you are not obligated to do so. If you
29 do not wish to do so, delete this exception statement from your
30 version. If you delete this exception statement from all source
31 files in the program, then also delete it here.
35 #include "raw_convert.h"
36 #include "locale_convert.h"
37 #include <boost/algorithm/string.hpp>
44 /** @param v Numeric value as an ASCII string */
49 struct lconv* lc = localeconv ();
50 /* thousands_sep may be . so remove them before changing decimal points */
51 boost::algorithm::replace_all (v, lc->thousands_sep, "");
52 boost::algorithm::replace_all (v, lc->decimal_point, ".");
61 struct lconv* lc = localeconv ();
62 boost::algorithm::replace_all (v, ".", lc->decimal_point);
63 /* We hope it's ok not to add in thousands separators here */
70 dcp::raw_convert (unsigned char v, int precision, bool fixed)
72 return make_raw (locale_convert<string> (v, precision, fixed));
78 dcp::raw_convert (unsigned short int v, int precision, bool fixed)
80 return make_raw (locale_convert<string> (v, precision, fixed));
86 dcp::raw_convert (int v, int precision, bool fixed)
88 return make_raw (locale_convert<string> (v, precision, fixed));
94 dcp::raw_convert (unsigned int v, int precision, bool fixed)
96 return make_raw (locale_convert<string> (v, precision, fixed));
102 dcp::raw_convert (long v, int precision, bool fixed)
104 return make_raw (locale_convert<string> (v, precision, fixed));
110 dcp::raw_convert (unsigned long v, int precision, bool fixed)
112 return make_raw (locale_convert<string> (v, precision, fixed));
118 dcp::raw_convert (long long v, int precision, bool fixed)
120 return make_raw (locale_convert<string> (v, precision, fixed));
126 dcp::raw_convert (unsigned long long v, int precision, bool fixed)
128 return make_raw (locale_convert<string> (v, precision, fixed));
134 dcp::raw_convert (float v, int precision, bool fixed)
136 return make_raw (locale_convert<string> (v, precision, fixed));
142 dcp::raw_convert (double v, int precision, bool fixed)
144 return make_raw (locale_convert<string> (v, precision, fixed));
150 dcp::raw_convert (char const * v, int, bool)
158 dcp::raw_convert (char* v, int, bool)
166 dcp::raw_convert (string v, int, bool)
174 dcp::raw_convert (char v, int, bool)
184 dcp::raw_convert (wchar_t const * v, int, bool)
187 return string (w.begin(), w.end());
193 dcp::raw_convert (std::string v, int precision, bool fixed)
195 return locale_convert<unsigned char> (make_local (v), precision, fixed);
201 dcp::raw_convert (std::string v, int precision, bool fixed)
203 return locale_convert<unsigned short int> (make_local (v), precision, fixed);
209 dcp::raw_convert (string v, int precision, bool fixed)
211 return locale_convert<int> (make_local (v), precision, fixed);
217 dcp::raw_convert (string v, int precision, bool fixed)
219 return locale_convert<long> (make_local (v), precision, fixed);
225 dcp::raw_convert (string v, int precision, bool fixed)
227 return locale_convert<unsigned long> (make_local (v), precision, fixed);
233 dcp::raw_convert (string v, int precision, bool fixed)
235 return locale_convert<long long> (make_local (v), precision, fixed);
241 dcp::raw_convert (string v, int precision, bool fixed)
243 return locale_convert<unsigned long long> (make_local (v), precision, fixed);
249 dcp::raw_convert (char const * v, int precision, bool fixed)
251 return locale_convert<int> (make_local (v), precision, fixed);
257 dcp::raw_convert (string v, int precision, bool fixed)
259 return locale_convert<float> (make_local (v), precision, fixed);
265 dcp::raw_convert (char const * v, int precision, bool fixed)
267 return locale_convert<float> (make_local (v), precision, fixed);
273 dcp::raw_convert (string v, int precision, bool fixed)
275 return locale_convert<double> (make_local (v), precision, fixed);
281 dcp::raw_convert (char const * v, int precision, bool fixed)
283 return locale_convert<double> (make_local (v), precision, fixed);