X-Git-Url: https://git.carlh.net/gitweb/?a=blobdiff_plain;f=src%2Flib%2Fraw_convert.h;h=92d8e3d32a979dd290dd992a5f9d27a45794854f;hb=422be0eece2bf6ee80db1d3c21553cd82efff789;hp=96bd7f6335042d71d99f4244c617c935dfc5d2b2;hpb=d81a3176a39b92881f7c275eb4e6001f55baf3ea;p=dcpomatic.git diff --git a/src/lib/raw_convert.h b/src/lib/raw_convert.h index 96bd7f633..92d8e3d32 100644 --- a/src/lib/raw_convert.h +++ b/src/lib/raw_convert.h @@ -1,26 +1,27 @@ /* 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 "safe_stringstream.h" +#include #include /** A sort-of version of boost::lexical_cast that does uses the "C" @@ -30,13 +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