summaryrefslogtreecommitdiff
path: root/include/mbgl/util/utf.hpp
diff options
context:
space:
mode:
Diffstat (limited to 'include/mbgl/util/utf.hpp')
-rw-r--r--include/mbgl/util/utf.hpp50
1 files changed, 50 insertions, 0 deletions
diff --git a/include/mbgl/util/utf.hpp b/include/mbgl/util/utf.hpp
new file mode 100644
index 0000000000..5dfc4ad2d1
--- /dev/null
+++ b/include/mbgl/util/utf.hpp
@@ -0,0 +1,50 @@
+#ifndef MBGL_UTIL_UTF
+#define MBGL_UTIL_UTF
+
+#include <memory>
+
+// g++/libstdc++ is missing c++11 codecvt support
+#ifdef __linux__
+#pragma GCC diagnostic push
+#ifndef __clang__
+#pragma GCC diagnostic ignored "-Wunused-local-typedefs"
+#endif
+#include <boost/locale.hpp>
+#pragma GCC diagnostic pop
+#else
+#include <codecvt>
+#include <locale>
+#endif
+
+namespace mbgl {
+
+namespace util {
+
+#ifdef __linux__
+
+class utf8_to_utf32 {
+ public:
+ explicit utf8_to_utf32() {}
+ std::u32string convert(std::string const& utf8) {
+ return boost::locale::conv::utf_to_utf<char32_t>(utf8);
+ }
+};
+
+#else
+
+class utf8_to_utf32 {
+ public:
+ explicit utf8_to_utf32()
+ : utf32conv_() {}
+ std::u32string convert(std::string const& utf8) {
+ return utf32conv_.from_bytes(utf8);
+ }
+ private:
+ std::wstring_convert<std::codecvt_utf8<char32_t>, char32_t> utf32conv_;
+};
+
+#endif
+
+}}
+
+#endif