Support reading of encrypted subtitles.
[libdcp.git] / src / raw_convert.h
index 5fc05c12257e3d65204c69dfde971d063eadf39b..585c18fc2910717b4d85e9aecbcf3d8010caf88f 100644 (file)
@@ -34,8 +34,9 @@
 #ifndef LIBDCP_RAW_CONVERT_H
 #define LIBDCP_RAW_CONVERT_H
 
-#include <locked_sstream.h>
+#include <boost/static_assert.hpp>
 #include <iomanip>
+#include <stdint.h>
 
 namespace dcp {
 
@@ -46,18 +47,72 @@ template <typename P, typename Q>
 P
 raw_convert (Q v, int precision = 16, bool fixed = false)
 {
-       locked_stringstream s;
-       s.imbue (std::locale::classic ());
-       s << std::setprecision (precision);
-       if (fixed) {
-               s << std::fixed;
-       }
-       s << v;
-       P r;
-       s >> r;
-       return r;
+       /* We can't write a generic version of raw_convert; all required
+          versions must be specialised.
+       */
+       BOOST_STATIC_ASSERT (sizeof (Q) == 0);
 }
 
-};
+template <>
+std::string
+raw_convert (int v, int, bool);
+
+template <>
+std::string
+raw_convert (unsigned int v, int, bool);
+
+template <>
+std::string
+raw_convert (int64_t v, int, bool);
+
+template <>
+std::string
+raw_convert (uint64_t v, int, bool);
+
+template <>
+std::string
+raw_convert (float v, int, bool);
+
+template <>
+std::string
+raw_convert (double v, int, bool);
+
+template <>
+std::string
+raw_convert (char const * v, int, bool);
+
+template <>
+std::string
+raw_convert (char* v, int, bool);
+
+template <>
+std::string
+raw_convert (std::string v, int, bool);
+
+template <>
+int
+raw_convert (std::string v, int, bool);
+
+template <>
+int
+raw_convert (char const * v, int, bool);
+
+template <>
+float
+raw_convert (std::string v, int, bool);
+
+template <>
+float
+raw_convert (char const * v, int, bool);
+
+template <>
+double
+raw_convert (std::string v, int, bool);
+
+template <>
+double
+raw_convert (char const * v, int, bool);
+
+}
 
 #endif