]> git.lyx.org Git - features.git/blobdiff - src/support/convert.cpp
Revert "Amend 3093789e for cmake build"
[features.git] / src / support / convert.cpp
index 076c9d7d28cb78ad7d748ba40faeadf0b4dc2458..5912ac54e69eb5c328d67c61e29eab4f1e3eb1ba 100644 (file)
 
 using namespace std;
 
-namespace lyx {
+namespace {
+
+// A version of lexical cast that does not throw. Useful for when we convert to string
+template<typename To, typename From>
+To lexical_cast(From const & value, To const & defaultResult = To())
+{
+       try {
+               return boost::lexical_cast<To>(value);
+       } catch(...) {
+               // Ignore all exceptions and use default.
+               return defaultResult;
+       }
+}
+
+} // namespace
 
-using boost::lexical_cast;
+
+namespace lyx {
 
 template<>
 string convert<string>(bool b)
@@ -90,7 +105,7 @@ docstring convert<docstring>(unsigned long ul)
 }
 
 
-#ifdef LYX_USE_LONG_LONG
+#ifdef HAVE_LONG_LONG_INT
 template<>
 string convert<string>(unsigned long long ull)
 {
@@ -103,39 +118,53 @@ docstring convert<docstring>(unsigned long long ull)
 {
        return from_ascii(lexical_cast<string>(ull));
 }
-#endif
 
 
 template<>
-string convert<string>(long l)
+string convert<string>(long long ll)
 {
-       return lexical_cast<string>(l);
+       return lexical_cast<string>(ll);
 }
 
 
 template<>
-docstring convert<docstring>(long l)
+docstring convert<docstring>(long long ll)
 {
-       return from_ascii(lexical_cast<string>(l));
+       return from_ascii(lexical_cast<string>(ll));
 }
 
 
-#ifdef LYX_USE_LONG_LONG
 template<>
-string convert<string>(long long ll)
+unsigned long long convert<unsigned long long>(string const s)
 {
-       return lexical_cast<string>(ll);
+       return strtoull(s.c_str(), nullptr, 10);
 }
 
 
+/* not presently needed
 template<>
-docstring convert<docstring>(long long ll)
+long long convert<long long>(string const s)
 {
-       return from_ascii(lexical_cast<string>(ll));
+       return strtoll(s.c_str(), nullptr, 10);
 }
+*/
 #endif
 
 
+template<>
+string convert<string>(long l)
+{
+       return lexical_cast<string>(l);
+}
+
+
+template<>
+docstring convert<docstring>(long l)
+{
+       return from_ascii(lexical_cast<string>(l));
+}
+
+
 template<>
 string convert<string>(float f)
 {
@@ -164,49 +193,55 @@ docstring convert<docstring>(double d)
 template<>
 int convert<int>(string const s)
 {
-       return strtol(s.c_str(), 0, 10);
+       return int(strtol(s.c_str(), nullptr, 10));
+}
+
+
+int convert(std::string const & s, int base)
+{
+       return int(strtol(s.c_str(), nullptr, base));
 }
 
 
 template<>
 int convert<int>(docstring const s)
 {
-       return strtol(to_ascii(s).c_str(), 0, 10);
+       return int(strtol(to_ascii(s).c_str(), nullptr, 10));
 }
 
 
 template<>
 unsigned int convert<unsigned int>(string const s)
 {
-       return strtoul(s.c_str(), 0, 10);
+       return static_cast<unsigned int>(strtoul(s.c_str(), nullptr, 10));
 }
 
 
 template<>
 unsigned long convert<unsigned long>(string const s)
 {
-       return strtoul(s.c_str(), 0, 10);
+       return strtoul(s.c_str(), nullptr, 10);
 }
 
 
 template<>
 double convert<double>(string const s)
 {
-       return strtod(s.c_str(), 0);
+       return strtod(s.c_str(), nullptr);
 }
 
 
 template<>
 int convert<int>(char const * cptr)
 {
-       return strtol(cptr, 0, 10);
+       return int(strtol(cptr, nullptr, 10));
 }
 
 
 template<>
 double convert<double>(char const * cptr)
 {
-       return strtod(cptr, 0);
+       return strtod(cptr, nullptr);
 }