Boost.Nowide
convert.hpp
1 //
2 // Copyright (c) 2012 Artyom Beilis (Tonkikh)
3 // Copyright (c) 2020 Alexander Grund
4 //
5 // Distributed under the Boost Software License, Version 1.0. (See
6 // accompanying file LICENSE or copy at
7 // http://www.boost.org/LICENSE_1_0.txt)
8 //
9 #ifndef BOOST_NOWIDE_CONVERT_HPP_INCLUDED
10 #define BOOST_NOWIDE_CONVERT_HPP_INCLUDED
11 
12 #include <boost/nowide/detail/is_string_container.hpp>
13 #include <boost/nowide/utf/convert.hpp>
14 #include <string>
15 
16 namespace boost {
17 namespace nowide {
18 
26  inline char* narrow(char* output, size_t output_size, const wchar_t* begin, const wchar_t* end)
27  {
28  return utf::convert_buffer(output, output_size, begin, end);
29  }
37  inline char* narrow(char* output, size_t output_size, const wchar_t* source)
38  {
39  return narrow(output, output_size, source, source + utf::strlen(source));
40  }
41 
49  inline wchar_t* widen(wchar_t* output, size_t output_size, const char* begin, const char* end)
50  {
51  return utf::convert_buffer(output, output_size, begin, end);
52  }
60  inline wchar_t* widen(wchar_t* output, size_t output_size, const char* source)
61  {
62  return widen(output, output_size, source, source + utf::strlen(source));
63  }
64 
72  template<typename T_Char, typename = detail::requires_wide_char<T_Char>>
73  inline std::string narrow(const T_Char* s, size_t count)
74  {
75  return utf::convert_string<char>(s, s + count);
76  }
83  template<typename T_Char, typename = detail::requires_wide_char<T_Char>>
84  inline std::string narrow(const T_Char* s)
85  {
86  return narrow(s, utf::strlen(s));
87  }
94  template<typename StringOrStringView, typename = detail::requires_wide_string_container<StringOrStringView>>
95  inline std::string narrow(const StringOrStringView& s)
96  {
97  return utf::convert_string<char>(s.data(), s.data() + s.size());
98  }
99 
107  template<typename T_Char, typename = detail::requires_narrow_char<T_Char>>
108  inline std::wstring widen(const T_Char* s, size_t count)
109  {
110  return utf::convert_string<wchar_t>(s, s + count);
111  }
118  template<typename T_Char, typename = detail::requires_narrow_char<T_Char>>
119  inline std::wstring widen(const T_Char* s)
120  {
121  return widen(s, utf::strlen(s));
122  }
129  template<typename StringOrStringView, typename = detail::requires_narrow_string_container<StringOrStringView>>
130  inline std::wstring widen(const StringOrStringView& s)
131  {
132  return utf::convert_string<wchar_t>(s.data(), s.data() + s.size());
133  }
134 } // namespace nowide
135 } // namespace boost
136 
137 #endif
wchar_t * widen(wchar_t *output, size_t output_size, const char *begin, const char *end)
Definition: convert.hpp:49
char * narrow(char *output, size_t output_size, const wchar_t *begin, const wchar_t *end)
Definition: convert.hpp:26
size_t strlen(const Char *s)
Definition: convert.hpp:26
CharOut * convert_buffer(CharOut *buffer, size_t buffer_size, const CharIn *source_begin, const CharIn *source_end)
Definition: convert.hpp:43