Use an enum class for Marker.
[libdcp.git] / src / locale_convert.cc
index 3858006ef6fe78f71498bce8321724af6cebabe8..915cac826bbe58387977ed1c355c1a5243ed8985 100644 (file)
 #include <inttypes.h>
 
 using std::string;
+using std::wstring;
+
+template<>
+string
+dcp::locale_convert (unsigned char x, int, bool)
+{
+       char buffer[64];
+       snprintf (buffer, sizeof(buffer), "%hhd", x);
+       return buffer;
+}
+
+template<>
+string
+dcp::locale_convert (unsigned short int x, int, bool)
+{
+       char buffer[64];
+       snprintf (buffer, sizeof(buffer), "%hd", x);
+       return buffer;
+}
 
 template<>
 string
@@ -51,25 +70,55 @@ string
 dcp::locale_convert (unsigned int x, int, bool)
 {
        char buffer[64];
-       snprintf (buffer, sizeof(buffer), "%ud", x);
+       snprintf (buffer, sizeof(buffer), "%u", x);
+       return buffer;
+}
+
+template<>
+string
+dcp::locale_convert (long int x, int, bool)
+{
+       char buffer[64];
+#ifdef LIBDCP_WINDOWS
+       __mingw_snprintf (buffer, sizeof(buffer), "%ld", x);
+#else
+       snprintf (buffer, sizeof(buffer), "%ld", x);
+#endif
+       return buffer;
+}
+
+template<>
+string
+dcp::locale_convert (unsigned long int x, int, bool)
+{
+       char buffer[64];
+       snprintf (buffer, sizeof(buffer), "%lu", x);
        return buffer;
 }
 
 template<>
 string
-dcp::locale_convert (int64_t x, int, bool)
+dcp::locale_convert (long long int x, int, bool)
 {
        char buffer[64];
-       snprintf (buffer, sizeof(buffer), "%" PRId64, x);
+#ifdef LIBDCP_WINDOWS
+       __mingw_snprintf (buffer, sizeof(buffer), "%lld", x);
+#else
+       snprintf (buffer, sizeof(buffer), "%lld", x);
+#endif
        return buffer;
 }
 
 template<>
 string
-dcp::locale_convert (uint64_t x, int, bool)
+dcp::locale_convert (unsigned long long int x, int, bool)
 {
        char buffer[64];
-       snprintf (buffer, sizeof(buffer), "%" PRIu64, x);
+#ifdef LIBDCP_WINDOWS
+       __mingw_snprintf (buffer, sizeof(buffer), "%llu", x);
+#else
+       snprintf (buffer, sizeof(buffer), "%llu", x);
+#endif
        return buffer;
 }
 
@@ -124,6 +173,57 @@ dcp::locale_convert (char const * x, int, bool)
        return x;
 }
 
+template<>
+string
+dcp::locale_convert (wchar_t const * x, int, bool)
+{
+       wstring s (x);
+       return string (s.begin(), s.end());
+}
+
+template<>
+string
+dcp::locale_convert (char x, int, bool)
+{
+       string s;
+       s += x;
+       return s;
+}
+
+template<>
+string
+dcp::locale_convert (boost::filesystem::path x, int, bool)
+{
+       return x.string();
+}
+
+template<>
+unsigned char
+dcp::locale_convert (string x, int, bool)
+{
+       unsigned char y = 0;
+       sscanf (x.c_str(), "%hhu", &y);
+       return y;
+}
+
+template<>
+unsigned short int
+dcp::locale_convert (string x, int, bool)
+{
+       unsigned short int y = 0;
+       sscanf (x.c_str(), "%hu", &y);
+       return y;
+}
+
+template<>
+unsigned int
+dcp::locale_convert (string x, int, bool)
+{
+       unsigned int y = 0;
+       sscanf (x.c_str(), "%u", &y);
+       return y;
+}
+
 template<>
 int
 dcp::locale_convert (string x, int, bool)
@@ -134,11 +234,50 @@ dcp::locale_convert (string x, int, bool)
 }
 
 template<>
-int64_t
+long
+dcp::locale_convert (string x, int, bool)
+{
+       long int y = 0;
+       sscanf (x.c_str(), "%ld", &y);
+       return y;
+}
+
+template<>
+unsigned long
+dcp::locale_convert (string x, int, bool)
+{
+       unsigned long y = 0;
+#ifdef LIBDCP_WINDOWS
+       __mingw_sscanf (x.c_str(), "%lud", &y);
+#else
+       sscanf (x.c_str(), "%lud", &y);
+#endif
+       return y;
+}
+
+template<>
+long long
+dcp::locale_convert (string x, int, bool)
+{
+       long long y = 0;
+#ifdef LIBDCP_WINDOWS
+       __mingw_sscanf (x.c_str(), "%lld", &y);
+#else
+       sscanf (x.c_str(), "%lld", &y);
+#endif
+       return y;
+}
+
+template<>
+unsigned long long
 dcp::locale_convert (string x, int, bool)
 {
-       int64_t y = 0;
-       sscanf (x.c_str(), "%" PRId64, &y);
+       unsigned long long y = 0;
+#ifdef LIBDCP_WINDOWS
+       __mingw_sscanf (x.c_str(), "%llud", &y);
+#else
+       sscanf (x.c_str(), "%llud", &y);
+#endif
        return y;
 }