X-Git-Url: https://git.proxmox.com/?a=blobdiff_plain;f=ceph%2Fsrc%2Fboost%2Fboost%2Fspirit%2Fhome%2Fx3%2Fsupport%2Futility%2Futf8.hpp;h=e2df577f6ea5b9bf0133f6787ca2cdb54a249463;hb=92f5a8d42d07f9929ae4fa7e01342fe8d96808a8;hp=b141cce6d2eab021725cd0c926f526d48ef38995;hpb=a0324939f9d0e1905d5df8f57442f09dc70af83d;p=ceph.git diff --git a/ceph/src/boost/boost/spirit/home/x3/support/utility/utf8.hpp b/ceph/src/boost/boost/spirit/home/x3/support/utility/utf8.hpp index b141cce6d..e2df577f6 100644 --- a/ceph/src/boost/boost/spirit/home/x3/support/utility/utf8.hpp +++ b/ceph/src/boost/boost/spirit/home/x3/support/utility/utf8.hpp @@ -62,6 +62,44 @@ namespace boost { namespace spirit { namespace x3 } return result; } + + // Assume wchar_t content is UTF-16 on Windows and UCS-4 on Unix +#if defined(_WIN32) || defined(__CYGWIN__) + inline utf8_string to_utf8(wchar_t value) + { + utf8_string result; + typedef std::back_insert_iterator insert_iter; + insert_iter out_iter(result); + utf8_output_iterator utf8_iter(out_iter); + + u16_to_u32_iterator ucs4_iter(&value); + *utf8_iter++ = *ucs4_iter; + + return result; + } + + inline utf8_string to_utf8(wchar_t const* str) + { + utf8_string result; + typedef std::back_insert_iterator insert_iter; + insert_iter out_iter(result); + utf8_output_iterator utf8_iter(out_iter); + + u16_to_u32_iterator ucs4_iter(str); + for (ucs4_char c; (c = *ucs4_iter) != ucs4_char(); ++ucs4_iter) { + *utf8_iter++ = c; + } + + return result; + } + + template + inline utf8_string + to_utf8(std::basic_string const& str) + { + return to_utf8(str.c_str()); + } +#endif }}} #endif