Deprecate fmt::char8_t

This commit is contained in:
Victor Zverovich
2020-03-14 10:32:34 -07:00
parent 6f01b6ebb6
commit 678341275b
4 changed files with 40 additions and 42 deletions

View File

@@ -315,6 +315,12 @@ FMT_CONSTEXPR typename std::make_unsigned<Int>::type to_unsigned(Int value) {
FMT_ASSERT(value >= 0, "negative value");
return static_cast<typename std::make_unsigned<Int>::type>(value);
}
#ifdef __cpp_char8_t
using char8_type = char8_t;
#else
enum char8_type : unsigned char {};
#endif
} // namespace internal
template <typename... Ts>
@@ -415,15 +421,15 @@ using string_view = basic_string_view<char>;
using wstring_view = basic_string_view<wchar_t>;
#ifndef __cpp_char8_t
// A UTF-8 code unit type.
enum char8_t : unsigned char {};
// char8_t is deprecated; use char instead.
using char8_t FMT_DEPRECATED_ALIAS = internal::char8_type;
#endif
/** Specifies if ``T`` is a character type. Can be specialized by users. */
template <typename T> struct is_char : std::false_type {};
template <> struct is_char<char> : std::true_type {};
template <> struct is_char<wchar_t> : std::true_type {};
template <> struct is_char<char8_t> : std::true_type {};
template <> struct is_char<internal::char8_type> : std::true_type {};
template <> struct is_char<char16_t> : std::true_type {};
template <> struct is_char<char32_t> : std::true_type {};

View File

@@ -482,7 +482,7 @@ inline size_t count_code_points(basic_string_view<char> s) {
return num_code_points;
}
inline size_t count_code_points(basic_string_view<char8_t> s) {
inline size_t count_code_points(basic_string_view<char8_type> s) {
return count_code_points(basic_string_view<char>(
reinterpret_cast<const char*>(s.data()), s.size()));
}
@@ -494,8 +494,8 @@ inline size_t code_point_index(basic_string_view<Char> s, size_t n) {
}
// Calculates the index of the nth code point in a UTF-8 string.
inline size_t code_point_index(basic_string_view<char8_t> s, size_t n) {
const char8_t* data = s.data();
inline size_t code_point_index(basic_string_view<char8_type> s, size_t n) {
const char8_type* data = s.data();
size_t num_code_points = 0;
for (size_t i = 0, size = s.size(); i != size; ++i) {
if ((data[i] & 0xc0) != 0x80 && ++num_code_points > n) {
@@ -505,13 +505,13 @@ inline size_t code_point_index(basic_string_view<char8_t> s, size_t n) {
return s.size();
}
inline char8_t to_char8_t(char c) { return static_cast<char8_t>(c); }
inline char8_type to_char8_t(char c) { return static_cast<char8_type>(c); }
template <typename InputIt, typename OutChar>
using needs_conversion = bool_constant<
std::is_same<typename std::iterator_traits<InputIt>::value_type,
char>::value &&
std::is_same<OutChar, char8_t>::value>;
std::is_same<OutChar, char8_type>::value>;
template <typename OutChar, typename InputIt, typename OutputIt,
FMT_ENABLE_IF(!needs_conversion<InputIt, OutChar>::value)>
@@ -555,20 +555,22 @@ class buffer_range : public internal::output_range<
: internal::output_range<iterator, T>(std::back_inserter(buf)) {}
};
class FMT_DEPRECATED u8string_view : public basic_string_view<char8_t> {
class FMT_DEPRECATED u8string_view
: public basic_string_view<internal::char8_type> {
public:
u8string_view(const char* s)
: basic_string_view<char8_t>(reinterpret_cast<const char8_t*>(s)) {}
: basic_string_view<internal::char8_type>(
reinterpret_cast<const internal::char8_type*>(s)) {}
u8string_view(const char* s, size_t count) FMT_NOEXCEPT
: basic_string_view<char8_t>(reinterpret_cast<const char8_t*>(s), count) {
}
: basic_string_view<internal::char8_type>(
reinterpret_cast<const internal::char8_type*>(s), count) {}
};
#if FMT_USE_USER_DEFINED_LITERALS
inline namespace literals {
FMT_DEPRECATED inline basic_string_view<char8_t> operator"" _u(const char* s,
std::size_t n) {
return {reinterpret_cast<const char8_t*>(s), n};
FMT_DEPRECATED inline basic_string_view<internal::char8_type> operator"" _u(
const char* s, std::size_t n) {
return {reinterpret_cast<const internal::char8_type*>(s), n};
}
} // namespace literals
#endif