]> git.lyx.org Git - lyx.git/blobdiff - src/support/convert.cpp
Make tab movement visible (#10733)
[lyx.git] / src / support / convert.cpp
index 6b985f50baf26042d972fa8d4ea8f70127763ea1..b1c554e0832988e274b6003746bf80cc6d6bc019 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;
+       }
+}
 
-using boost::lexical_cast;
+} // namespace
+
+
+namespace lyx {
 
 template<>
 string convert<string>(bool b)
@@ -90,6 +105,22 @@ docstring convert<docstring>(unsigned long ul)
 }
 
 
+#ifdef LYX_USE_LONG_LONG
+template<>
+string convert<string>(unsigned long long ull)
+{
+       return lexical_cast<string>(ull);
+}
+
+
+template<>
+docstring convert<docstring>(unsigned long long ull)
+{
+       return from_ascii(lexical_cast<string>(ull));
+}
+#endif
+
+
 template<>
 string convert<string>(long l)
 {
@@ -104,6 +135,22 @@ docstring convert<docstring>(long l)
 }
 
 
+#ifdef LYX_USE_LONG_LONG
+template<>
+string convert<string>(long long ll)
+{
+       return lexical_cast<string>(ll);
+}
+
+
+template<>
+docstring convert<docstring>(long long ll)
+{
+       return from_ascii(lexical_cast<string>(ll));
+}
+#endif
+
+
 template<>
 string convert<string>(float f)
 {
@@ -122,6 +169,13 @@ string convert<string>(double d)
 }
 
 
+template<>
+docstring convert<docstring>(double d)
+{
+       return from_ascii(convert<string>(d));
+}
+
+
 template<>
 int convert<int>(string const s)
 {