]> git.proxmox.com Git - ceph.git/blobdiff - ceph/src/boost/boost/nowide/convert.hpp
update ceph source to reef 18.1.2
[ceph.git] / ceph / src / boost / boost / nowide / convert.hpp
index bf31f2b3a53fb051f0d3d35c0b415ca5cd2dcb28..5e913d8a4104dc692e49226ea9ac06f304561d8c 100644 (file)
@@ -1,5 +1,6 @@
 //
 //  Copyright (c) 2012 Artyom Beilis (Tonkikh)
+//  Copyright (c) 2020 Alexander Grund
 //
 //  Distributed under the Boost Software License, Version 1.0. (See
 //  accompanying file LICENSE or copy at
@@ -8,6 +9,7 @@
 #ifndef BOOST_NOWIDE_CONVERT_HPP_INCLUDED
 #define BOOST_NOWIDE_CONVERT_HPP_INCLUDED
 
+#include <boost/nowide/detail/is_string_container.hpp>
 #include <boost/nowide/utf/convert.hpp>
 #include <string>
 
@@ -67,7 +69,8 @@ namespace nowide {
     /// \param count Number of characters to convert
     /// Any illegal sequences are replaced with the replacement character, see #BOOST_NOWIDE_REPLACEMENT_CHARACTER
     ///
-    inline std::string narrow(const wchar_t* s, size_t count)
+    template<typename T_Char, typename = detail::requires_wide_char<T_Char>>
+    inline std::string narrow(const T_Char* s, size_t count)
     {
         return utf::convert_string<char>(s, s + count);
     }
@@ -77,7 +80,8 @@ namespace nowide {
     /// \param s NULL terminated input string
     /// Any illegal sequences are replaced with the replacement character, see #BOOST_NOWIDE_REPLACEMENT_CHARACTER
     ///
-    inline std::string narrow(const wchar_t* s)
+    template<typename T_Char, typename = detail::requires_wide_char<T_Char>>
+    inline std::string narrow(const T_Char* s)
     {
         return narrow(s, utf::strlen(s));
     }
@@ -87,9 +91,10 @@ namespace nowide {
     /// \param s Input string
     /// Any illegal sequences are replaced with the replacement character, see #BOOST_NOWIDE_REPLACEMENT_CHARACTER
     ///
-    inline std::string narrow(const std::wstring& s)
+    template<typename StringOrStringView, typename = detail::requires_wide_string_container<StringOrStringView>>
+    inline std::string narrow(const StringOrStringView& s)
     {
-        return narrow(s.c_str(), s.size());
+        return utf::convert_string<char>(s.data(), s.data() + s.size());
     }
 
     ///
@@ -99,7 +104,8 @@ namespace nowide {
     /// \param count Number of characters to convert
     /// Any illegal sequences are replaced with the replacement character, see #BOOST_NOWIDE_REPLACEMENT_CHARACTER
     ///
-    inline std::wstring widen(const char* s, size_t count)
+    template<typename T_Char, typename = detail::requires_narrow_char<T_Char>>
+    inline std::wstring widen(const T_Char* s, size_t count)
     {
         return utf::convert_string<wchar_t>(s, s + count);
     }
@@ -109,7 +115,8 @@ namespace nowide {
     /// \param s NULL terminated input string
     /// Any illegal sequences are replaced with the replacement character, see #BOOST_NOWIDE_REPLACEMENT_CHARACTER
     ///
-    inline std::wstring widen(const char* s)
+    template<typename T_Char, typename = detail::requires_narrow_char<T_Char>>
+    inline std::wstring widen(const T_Char* s)
     {
         return widen(s, utf::strlen(s));
     }
@@ -119,9 +126,10 @@ namespace nowide {
     /// \param s Input string
     /// Any illegal sequences are replaced with the replacement character, see #BOOST_NOWIDE_REPLACEMENT_CHARACTER
     ///
-    inline std::wstring widen(const std::string& s)
+    template<typename StringOrStringView, typename = detail::requires_narrow_string_container<StringOrStringView>>
+    inline std::wstring widen(const StringOrStringView& s)
     {
-        return widen(s.c_str(), s.size());
+        return utf::convert_string<wchar_t>(s.data(), s.data() + s.size());
     }
 } // namespace nowide
 } // namespace boost