X-Git-Url: https://git.carlh.net/gitweb/?a=blobdiff_plain;f=src%2Fraw_convert.cc;h=f51a10f6806c6cbac22d2c92dc9a41f6045b6509;hb=b651392d70d7e37ce5a8a20da81d86e5d19aadd8;hp=b7685ab8d89b26dc0e10ff50af19361fe60d8843;hpb=3c93561190ceb883db6b69c1cd37d99cd547fe83;p=libdcp.git diff --git a/src/raw_convert.cc b/src/raw_convert.cc index b7685ab8..f51a10f6 100644 --- a/src/raw_convert.cc +++ b/src/raw_convert.cc @@ -1,5 +1,5 @@ /* - Copyright (C) 2014 Carl Hetherington + Copyright (C) 2014-2016 Carl Hetherington This file is part of libdcp. @@ -36,14 +36,17 @@ #include using std::string; +using std::wstring; +/** @param v Numeric value as an ASCII string */ static string make_raw (string v) { struct lconv* lc = localeconv (); - boost::algorithm::replace_all (v, lc->decimal_point, "."); + /* thousands_sep may be . so remove them before changing decimal points */ boost::algorithm::replace_all (v, lc->thousands_sep, ""); + boost::algorithm::replace_all (v, lc->decimal_point, "."); return v; } @@ -57,6 +60,20 @@ make_local (string v) return v; } +template <> +string +dcp::raw_convert (unsigned char v, int precision, bool fixed) +{ + return make_raw (locale_convert (v, precision, fixed)); +} + +template <> +string +dcp::raw_convert (unsigned short int v, int precision, bool fixed) +{ + return make_raw (locale_convert (v, precision, fixed)); +} + template <> string dcp::raw_convert (int v, int precision, bool fixed) @@ -73,21 +90,21 @@ dcp::raw_convert (unsigned int v, int precision, bool fixed) template <> string -dcp::raw_convert (long int v, int precision, bool fixed) +dcp::raw_convert (long v, int precision, bool fixed) { return make_raw (locale_convert (v, precision, fixed)); } template <> string -dcp::raw_convert (unsigned long int v, int precision, bool fixed) +dcp::raw_convert (unsigned long v, int precision, bool fixed) { return make_raw (locale_convert (v, precision, fixed)); } template <> string -dcp::raw_convert (long long int v, int precision, bool fixed) +dcp::raw_convert (long long v, int precision, bool fixed) { return make_raw (locale_convert (v, precision, fixed)); } @@ -134,6 +151,37 @@ dcp::raw_convert (string v, int, bool) return v; } +template <> +string +dcp::raw_convert (char v, int, bool) +{ + string s; + s += v; + return s; +} + +template <> +string +dcp::raw_convert (wchar_t const * v, int, bool) +{ + wstring w (v); + return string (w.begin(), w.end()); +} + +template <> +unsigned char +dcp::raw_convert (std::string v, int precision, bool fixed) +{ + return locale_convert (make_local (v), precision, fixed); +} + +template <> +unsigned short int +dcp::raw_convert (std::string v, int precision, bool fixed) +{ + return locale_convert (make_local (v), precision, fixed); +} + template <> int dcp::raw_convert (string v, int precision, bool fixed) @@ -141,6 +189,20 @@ dcp::raw_convert (string v, int precision, bool fixed) return locale_convert (make_local (v), precision, fixed); } +template <> +long +dcp::raw_convert (string v, int precision, bool fixed) +{ + return locale_convert (make_local (v), precision, fixed); +} + +template <> +long long +dcp::raw_convert (string v, int precision, bool fixed) +{ + return locale_convert (make_local (v), precision, fixed); +} + template <> int dcp::raw_convert (char const * v, int precision, bool fixed)