X-Git-Url: https://git.carlh.net/gitweb/?a=blobdiff_plain;f=src%2Flib%2Fraw_convert.h;h=92d8e3d32a979dd290dd992a5f9d27a45794854f;hb=422be0eece2bf6ee80db1d3c21553cd82efff789;hp=2e5d1373cabe956a0d29862ea36172e473bcbbab;hpb=769c71b5c3e050ccfc1c13771d24328fbf76a495;p=dcpomatic.git diff --git a/src/lib/raw_convert.h b/src/lib/raw_convert.h index 2e5d1373c..92d8e3d32 100644 --- a/src/lib/raw_convert.h +++ b/src/lib/raw_convert.h @@ -1,24 +1,28 @@ /* Copyright (C) 2014-2015 Carl Hetherington - This program is free software; you can redistribute it and/or modify + This file is part of DCP-o-matic. + + DCP-o-matic is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. - This program is distributed in the hope that it will be useful, + DCP-o-matic is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + along with DCP-o-matic. If not, see . */ +#ifndef DCPOMATIC_RAW_CONVERT_H +#define DCPOMATIC_RAW_CONVERT_H + +#include #include -#include "safe_stringstream.h" /** A sort-of version of boost::lexical_cast that does uses the "C" * locale (i.e. no thousands separators and a . for the decimal separator). @@ -27,11 +31,30 @@ template P raw_convert (Q v, int precision = 16) { - SafeStringStream s; + locked_stringstream s; s.imbue (std::locale::classic ()); s << std::setprecision (precision); s << v; - P r; + /* If the s >> r below fails to convert anything, we want r to + be left as a defined value. This construct (I believe) achieves + this by setting r to the default value of type P, even if P + is a POD type. + */ + P r = P (); s >> r; return r; } + +template <> +std::string +raw_convert (char const * v, int); + +template <> +std::string +raw_convert (char* v, int); + +template <> +std::string +raw_convert (std::string v, int); + +#endif