//
// 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
#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>
/// \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);
}
/// \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));
}
/// \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());
}
///
/// \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);
}
/// \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));
}
/// \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