MSTL 1.4.0
A Modern C++ Library with extended functionality, web components, and utility libraries
载入中...
搜索中...
未找到
icharacter.hpp
1#ifndef MSTL_CORE_INTERFACE_ICHARACTER_HPP__
2#define MSTL_CORE_INTERFACE_ICHARACTER_HPP__
3#include "../string/string.hpp"
4#include "ipackage.hpp"
6
7template <typename T, typename CharT>
8struct icharacter : ipackage<T, CharT> {
9 static_assert(is_character_v<CharT>, "icharacter can only be used with characters");
10
11 constexpr icharacter() noexcept = default;
12 constexpr icharacter(CharT value) noexcept : ipackage<T, CharT>(value) {}
13
14 MSTL_NODISCARD constexpr explicit operator bool() const noexcept {
15 return ipackage<T, CharT>::value_ != _MSTL initialize<CharT>();
16 }
17
18 static MSTL_CONSTEXPR20 string to_string(const basic_string_view<CharT>& obj) {
19 return T::to_string(obj);
20 }
21 static MSTL_CONSTEXPR20 wstring to_wstring(const basic_string_view<CharT>& obj) {
22 return T::to_wstring(obj);
23 }
24#ifdef MSTL_STANDARD_20__
25 static MSTL_CONSTEXPR20 u8string to_u8string(const basic_string_view<CharT>& obj) {
26 return T::to_u8string(obj);
27 }
28#endif
29 static MSTL_CONSTEXPR20 u16string to_u16string(const basic_string_view<CharT>& obj) {
30 return T::to_u16string(obj);
31 }
32 static MSTL_CONSTEXPR20 u32string to_u32string(const basic_string_view<CharT>& obj) {
33 return T::to_u32string(obj);
34 }
35};
36
37template <typename CharT, enable_if_t<is_standard_character_v<CharT>, int> = 0>
38MSTL_CONSTEXPR20 string to_string(const CharT& x) {
39 return icharacter<package_t<CharT>, CharT>::to_string(basic_string<CharT>(1, x).view());
40}
41template <typename CharT, enable_if_t<is_standard_character_v<CharT>, int> = 0>
42MSTL_CONSTEXPR20 string to_string(const CharT* x) {
43 return icharacter<package_t<CharT>, CharT>::to_string(basic_string_view<CharT>(x));
44}
45template <typename CharT, enable_if_t<is_standard_character_v<CharT>, int> = 0>
46MSTL_CONSTEXPR20 string to_string(const basic_string_view<CharT> x) {
47 return icharacter<package_t<CharT>, CharT>::to_string(x);
48}
49template <typename CharT, enable_if_t<is_standard_character_v<CharT>, int> = 0>
50MSTL_CONSTEXPR20 string to_string(const basic_string<CharT>& x) {
51 return icharacter<package_t<CharT>, CharT>::to_string(x.view());
52}
53template <typename CharT, enable_if_t<is_standard_character_v<CharT>, int> = 0>
54MSTL_CONSTEXPR20 string to_string(basic_string<CharT>&& x) {
55 return icharacter<package_t<CharT>, CharT>::to_string(x.view());
56}
57template <>
58MSTL_CONSTEXPR20 string to_string<char>(string&& x) {
59 return _MSTL move(x);
60}
61
62template <typename CharT, enable_if_t<is_standard_character_v<CharT>, int> = 0>
63MSTL_CONSTEXPR20 wstring to_wstring(const CharT& x) {
64 return icharacter<package_t<CharT>, CharT>::to_wstring(basic_string<CharT>(1, x).view());
65}
66template <typename CharT, enable_if_t<is_standard_character_v<CharT>, int> = 0>
67MSTL_CONSTEXPR20 wstring to_wstring(const CharT* x) {
68 return icharacter<package_t<CharT>, CharT>::to_wstring(basic_string_view<CharT>(x));
69}
70template <typename CharT, enable_if_t<is_standard_character_v<CharT>, int> = 0>
71MSTL_CONSTEXPR20 wstring to_wstring(const basic_string_view<CharT> x) {
72 return icharacter<package_t<CharT>, CharT>::to_wstring(x);
73}
74template <typename CharT, enable_if_t<is_standard_character_v<CharT>, int> = 0>
75MSTL_CONSTEXPR20 wstring to_wstring(const basic_string<CharT>& x) {
76 return icharacter<package_t<CharT>, CharT>::to_wstring(x.view());
77}
78template <typename CharT, enable_if_t<is_standard_character_v<CharT>, int> = 0>
79MSTL_CONSTEXPR20 wstring to_wstring(basic_string<CharT>&& x) {
80 return icharacter<package_t<CharT>, CharT>::to_wstring(x.view());
81}
82template <>
83MSTL_CONSTEXPR20 wstring to_wstring<wchar_t>(wstring&& x) {
84 return _MSTL move(x);
85}
86
87#ifdef MSTL_STANDARD_20__
88template <typename CharT, enable_if_t<is_standard_character_v<CharT>, int> = 0>
89MSTL_CONSTEXPR20 u8string to_u8string(const CharT& x) {
90 return icharacter<package_t<CharT>, CharT>::to_u8string(basic_string<CharT>(1, x).view());
91}
92template <typename CharT, enable_if_t<is_standard_character_v<CharT>, int> = 0>
93MSTL_CONSTEXPR20 u8string to_u8string(const CharT* x) {
94 return icharacter<package_t<CharT>, CharT>::to_u8string(basic_string_view<CharT>(x));
95}
96template <typename CharT, enable_if_t<is_standard_character_v<CharT>, int> = 0>
97MSTL_CONSTEXPR20 u8string to_u8string(const basic_string_view<CharT> x) {
98 return icharacter<package_t<CharT>, CharT>::to_u8string(x);
99}
100template <typename CharT, enable_if_t<is_standard_character_v<CharT>, int> = 0>
101MSTL_CONSTEXPR20 u8string to_u8string(const basic_string<CharT>& x) {
102 return icharacter<package_t<CharT>, CharT>::to_u8string(x.view());
103}
104template <typename CharT, enable_if_t<is_standard_character_v<CharT>, int> = 0>
105MSTL_CONSTEXPR20 u8string to_u8string(basic_string<CharT>&& x) {
106 return icharacter<package_t<CharT>, CharT>::to_u8string(x.view());
107}
108template <>
109MSTL_CONSTEXPR20 u8string to_u8string<char8_t>(u8string&& x) {
110 return _MSTL move(x);
111}
112#endif
113
114template <typename CharT, enable_if_t<is_standard_character_v<CharT>, int> = 0>
115MSTL_CONSTEXPR20 u16string to_u16string(const CharT& x) {
116 return icharacter<package_t<CharT>, CharT>::to_u16string(basic_string<CharT>(1, x).view());
117}
118template <typename CharT, enable_if_t<is_standard_character_v<CharT>, int> = 0>
119MSTL_CONSTEXPR20 u16string to_u16string(const CharT* x) {
120 return icharacter<package_t<CharT>, CharT>::to_u16string(basic_string_view<CharT>(x));
121}
122template <typename CharT, enable_if_t<is_standard_character_v<CharT>, int> = 0>
123MSTL_CONSTEXPR20 u16string to_u16string(const basic_string_view<CharT> x) {
124 return icharacter<package_t<CharT>, CharT>::to_u16string(x);
125}
126template <typename CharT, enable_if_t<is_standard_character_v<CharT>, int> = 0>
127MSTL_CONSTEXPR20 u16string to_u16string(const basic_string<CharT>& x) {
128 return icharacter<package_t<CharT>, CharT>::to_u16string(x.view());
129}
130template <typename CharT, enable_if_t<is_standard_character_v<CharT>, int> = 0>
131MSTL_CONSTEXPR20 u16string to_u16string(basic_string<CharT>&& x) {
132 return icharacter<package_t<CharT>, CharT>::to_u16string(x.view());
133}
134template <>
135MSTL_CONSTEXPR20 u16string to_u16string<char16_t>(u16string&& x) {
136 return _MSTL move(x);
137}
138
139template <typename CharT, enable_if_t<is_standard_character_v<CharT>, int> = 0>
140MSTL_CONSTEXPR20 u32string to_u32string(const CharT& x) {
141 return icharacter<package_t<CharT>, CharT>::to_u32string(basic_string<CharT>(1, x).view());
142}
143template <typename CharT, enable_if_t<is_standard_character_v<CharT>, int> = 0>
144MSTL_CONSTEXPR20 u32string to_u32string(const CharT* x) {
145 return icharacter<package_t<CharT>, CharT>::to_u32string(basic_string_view<CharT>(x));
146}
147template <typename CharT, enable_if_t<is_standard_character_v<CharT>, int> = 0>
148MSTL_CONSTEXPR20 u32string to_u32string(const basic_string_view<CharT> x) {
149 return icharacter<package_t<CharT>, CharT>::to_u32string(x);
150}
151template <typename CharT, enable_if_t<is_standard_character_v<CharT>, int> = 0>
152MSTL_CONSTEXPR20 u32string to_u32string(const basic_string<CharT>& x) {
153 return icharacter<package_t<CharT>, CharT>::to_u32string(x.view());
154}
155template <typename CharT, enable_if_t<is_standard_character_v<CharT>, int> = 0>
156MSTL_CONSTEXPR20 u32string to_u32string(basic_string<CharT>&& x) {
157 return icharacter<package_t<CharT>, CharT>::to_u32string(x.view());
158}
159template <>
160MSTL_CONSTEXPR20 u32string to_u32string<char32_t>(u32string&& x) {
161 return _MSTL move(x);
162}
163
165#endif // MSTL_CORE_INTERFACE_ICHARACTER_HPP__
#define _MSTL
全局命名空间MSTL前缀
#define MSTL_END_NAMESPACE__
结束全局命名空间MSTL
#define MSTL_BEGIN_NAMESPACE__
开始全局命名空间MSTL
constexpr Iterator2 move(Iterator1 first, Iterator1 last, Iterator2 result)
移动范围元素
constexpr T initialize() noexcept(is_nothrow_default_constructible< T >::value)
返回类型T的默认初始化值