6#if !defined(__XTD_TUNIT_INTERNAL__)
7#error "Do not include this file: Internal use only"
15#include <forward_list>
16#include <initializer_list>
27#include <unordered_map>
28#include <unordered_set>
31#include <xtd/optional>
32#include <xtd/target_id>
36template<
class type_t>
struct __tunit_is_printable : std::false_type {};
37template<>
struct __tunit_is_printable<bool> : std::true_type {};
38template<>
struct __tunit_is_printable<char> : std::true_type {};
39template<>
struct __tunit_is_printable<signed char> : std::true_type {};
40template<>
struct __tunit_is_printable<unsigned char> : std::true_type {};
41template<>
struct __tunit_is_printable<wchar_t> : std::true_type {};
42template<>
struct __tunit_is_printable<
xtd::
char8> : std::true_type {};
43template<>
struct __tunit_is_printable<
xtd::
char16> : std::true_type {};
44template<>
struct __tunit_is_printable<
xtd::
char32> : std::true_type {};
45template<>
struct __tunit_is_printable<short> : std::true_type {};
46template<>
struct __tunit_is_printable<unsigned short> : std::true_type {};
47template<>
struct __tunit_is_printable<int> : std::true_type {};
48template<>
struct __tunit_is_printable<unsigned int> : std::true_type {};
49template<>
struct __tunit_is_printable<long> : std::true_type {};
50template<>
struct __tunit_is_printable<unsigned long> : std::true_type {};
51template<>
struct __tunit_is_printable<long long> : std::true_type {};
52template<>
struct __tunit_is_printable<unsigned long long> : std::true_type {};
53template<>
struct __tunit_is_printable<const char*> : std::true_type {};
54template<>
struct __tunit_is_printable<const wchar_t*> : std::true_type {};
55template<>
struct __tunit_is_printable<float> : std::true_type {};
56template<>
struct __tunit_is_printable<double> : std::true_type {};
57template<>
struct __tunit_is_printable<long double> : std::true_type {};
58template<>
struct __tunit_is_printable<std::
string> : std::true_type {};
59template<>
struct __tunit_is_printable<
xtd::
string> : std::true_type {};
60template<>
struct __tunit_is_printable<std::
u8string> : std::true_type {};
61template<>
struct __tunit_is_printable<std::
u16string> : std::true_type {};
62template<>
struct __tunit_is_printable<std::
u32string> : std::true_type {};
63template<>
struct __tunit_is_printable<std::
wstring> : std::true_type {};
65template<
class char_t,
class char_traits_t,
class value_t>
66static void __tunit_print_value(std::basic_ostream<char_t, char_traits_t>& os,
const value_t& value, std::true_type) {
67 os.operator << (value);
70template<
class char_t,
class char_traits_t,
class value_t>
71static void __tunit_print_value(std::basic_ostream<char_t, char_traits_t>& os, value_t* value, std::true_type) {
72 os.operator << (value);
75template<
class char_t,
class char_traits_t,
class value_t>
76static void __tunit_print_value(std::basic_ostream<char_t, char_traits_t>& os,
const value_t* value, std::true_type) {
77 os.operator << (value);
80template<
class char_t,
class char_traits_t,
class value_t>
81static void __tunit_print_value(std::basic_ostream<char_t, char_traits_t>& os,
const value_t& value, std::false_type) {
82 size_t size =
sizeof(value) > 32 ? 32 : sizeof(value);
83 os <<
size <<
"-byte object <";
84 for (
size_t index = 0; index !=
size; index++)
85 os << (index != 0 ? (index % 2 == 0 ?
" " :
"-") :
"") << std::hex << std::setiosflags(std::ios_base::uppercase) << std::setw(2) << std::setfill('0') << static_cast<int>(
reinterpret_cast<const unsigned char*
>(&value)[index]) << std::resetiosflags(std::ios_base::dec) << std::dec;
86 os << (
size <
sizeof(value) ?
"-..." :
"") <<
">";
89template<
class char_t,
class char_traits_t,
class value_t>
90static void __print(std::basic_ostream<char_t, char_traits_t>& os,
const value_t& value) {
91 __tunit_print_value(os, value, __tunit_is_printable<value_t>());
94template<
class char_t,
class char_traits_t,
class value_t>
95static void __print(std::basic_ostream<char_t, char_traits_t>& os, value_t* value) {
96 __tunit_print_value(os, value, __tunit_is_printable<value_t>());
99template<
class char_t,
class char_traits_t,
class value_t>
100static void __print(std::basic_ostream<char_t, char_traits_t>& os,
const value_t* value) {
101 __tunit_print_value(os, value, __tunit_is_printable<value_t>());
104template<
class char_t,
class char_traits_t,
class value_t>
105struct __tunit_value_printer {
106 static void print(std::basic_ostream<char_t, char_traits_t>& os,
const value_t*& value) {
109 static void print(std::basic_ostream<char_t, char_traits_t>& os,
const value_t*
const& value) {
112 static void print(std::basic_ostream<char_t, char_traits_t>& os,
const value_t& value) {
117template<
class char_t,
class char_traits_t>
118struct __tunit_value_printer<char_t, char_traits_t, std::exception> {
119 static void print(std::basic_ostream<char_t, char_traits_t>& os,
const std::exception& value) {
120 os <<
"exception: " << value.what();
124template<
class char_t,
class char_traits_t,
class value_t>
125struct __tunit_value_printer<char_t, char_traits_t, std::
optional<value_t>> {
126 static void print(std::basic_ostream<char_t, char_traits_t>& os,
const std::optional<value_t>& value) {
127 if (!value.has_value())
131 __tunit_value_printer<char_t, char_traits_t, value_t>::print(os, value.value());
137template<
class char_t,
class char_traits_t>
138struct __tunit_value_printer<char_t, char_traits_t, std::
string> {
139 static void print(std::basic_ostream<char_t, char_traits_t>& os,
const std::string& value) {
140 os << std::quoted(value);
144template<
class char_t,
class char_traits_t>
145struct __tunit_value_printer<char_t, char_traits_t,
xtd::
string> {
146 static void print(std::basic_ostream<char_t, char_traits_t>& os,
const std::string& value) {
147 os << std::quoted(value);
151template<
class char_t,
class char_traits_t>
152struct __tunit_value_printer<char_t, char_traits_t, std::
u8string> {
153 static void print(std::basic_ostream<char_t, char_traits_t>& os,
const std::u8string& value) {
154 __tunit_value_printer<char_t, char_traits_t, xtd::char8>::print(os, value.c_str());
158template<
class char_t,
class char_traits_t>
159struct __tunit_value_printer<char_t, char_traits_t, std::
u16string> {
160 static void print(std::basic_ostream<char_t, char_traits_t>& os,
const std::u16string& value) {
161 __tunit_value_printer<char_t, char_traits_t, xtd::char16>::print(os, value.c_str());
165template<
class char_t,
class char_traits_t>
166struct __tunit_value_printer<char_t, char_traits_t, std::
u32string> {
167 static void print(std::basic_ostream<char_t, char_traits_t>& os,
const std::u32string& value) {
168 __tunit_value_printer<char_t, char_traits_t, xtd::char32>::print(os, value.c_str());
172template<
class char_t,
class char_traits_t>
173struct __tunit_value_printer<char_t, char_traits_t, std::
wstring> {
174 static void print(std::basic_ostream<char_t, char_traits_t>& os,
const std::wstring& value) {
175 __tunit_value_printer<char_t, char_traits_t, wchar_t>::print(os, value.c_str());
179template<
class char_t,
class char_traits_t>
180struct __tunit_value_printer<char_t, char_traits_t, const char*> {
181 static void print(std::basic_ostream<char_t, char_traits_t>& os,
const char*
const& value) {
182 os << std::quoted(value);
185 static void print(std::basic_ostream<char_t, char_traits_t>& os,
const char*& value) {
186 os << std::quoted(value);
189 static void print(std::basic_ostream<char_t, char_traits_t>& os,
char value) {
194template<
class char_t,
class char_traits_t>
195struct __tunit_value_printer<char_t, char_traits_t, char> {
196 static void print(std::basic_ostream<char_t, char_traits_t>& os,
const char*
const& value) {
197 os << std::quoted(value);
200 static void print(std::basic_ostream<char_t, char_traits_t>& os,
const char*& value) {
201 os << std::quoted(value);
204 static void print(std::basic_ostream<char_t, char_traits_t>& os,
char value) {
209template<
class char_t,
class char_traits_t>
210struct __tunit_value_printer<char_t, char_traits_t, const
xtd::
char8*> {
211 static void print(std::basic_ostream<char_t, char_traits_t>& os,
const xtd::char8*
const& value) {
213 for (
size_t index = 0; value[index] !=
'\0'; index++)
214 __tunit_value_printer<char_t, char_traits_t, xtd::char8>::print(os, value[index]);
218 static void print(std::basic_ostream<char_t, char_traits_t>& os,
const xtd::char8*& value) {
220 for (
size_t index = 0; value[index] !=
'\0'; index++)
221 __tunit_value_printer<char_t, char_traits_t, xtd::char8>::print(os, value[index]);
225 static void print(std::basic_ostream<char_t, char_traits_t>& os,
xtd::char8 value) {
226 if (value <=
char(0xFF))
227 os << static_cast<char>(value);
229 os <<
"\\x" << std::hex << static_cast<int>(value);
233template<
class char_t,
class char_traits_t>
234struct __tunit_value_printer<char_t, char_traits_t,
xtd::
char8> {
235 static void print(std::basic_ostream<char_t, char_traits_t>& os,
const xtd::char8*
const& value) {
237 for (
size_t index = 0; value[index] !=
'\0'; index++)
238 __tunit_value_printer<char_t, char_traits_t, xtd::char8>::print(os, value[index]);
242 static void print(std::basic_ostream<char_t, char_traits_t>& os,
const xtd::char8*& value) {
244 for (
size_t index = 0; value[index] !=
'\0'; index++)
245 __tunit_value_printer<char_t, char_traits_t, xtd::char8>::print(os, value[index]);
249 static void print(std::basic_ostream<char_t, char_traits_t>& os,
xtd::char8 value) {
250 os << static_cast<char>(value);
254template<
class char_t,
class char_traits_t>
255struct __tunit_value_printer<char_t, char_traits_t, const
xtd::
char16*> {
256 static void print(std::basic_ostream<char_t, char_traits_t>& os,
const xtd::char16*
const& value) {
258 for (
size_t index = 0; value[index] !=
'\0'; index++)
259 __tunit_value_printer<char_t, char_traits_t, xtd::char16>::print(os, value[index]);
263 static void print(std::basic_ostream<char_t, char_traits_t>& os,
const xtd::char16*& value) {
265 for (
size_t index = 0; value[index] != L
'\0'; index++)
266 __tunit_value_printer<char_t, char_traits_t, xtd::char16>::print(os, value[index]);
270 static void print(std::basic_ostream<char_t, char_traits_t>& os,
xtd::char16 value) {
272 os << static_cast<char>(value);
274 os <<
"\\x" << std::hex << static_cast<int>(value);
278template<
class char_t,
class char_traits_t>
279struct __tunit_value_printer<char_t, char_traits_t,
xtd::
char16> {
280 static void print(std::basic_ostream<char_t, char_traits_t>& os,
const xtd::char16*
const& value) {
282 for (
size_t index = 0; value[index] != L
'\0'; index++)
283 __tunit_value_printer<char_t, char_traits_t, xtd::char16>::print(os, value[index]);
287 static void print(std::basic_ostream<char_t, char_traits_t>& os,
const xtd::char16*& value) {
289 for (
size_t index = 0; value[index] != L
'\0'; index++)
290 __tunit_value_printer<char_t, char_traits_t, xtd::char16>::print(os, value[index]);
294 static void print(std::basic_ostream<char_t, char_traits_t>& os,
xtd::char16 value) {
296 os << static_cast<char>(value);
298 os <<
"\\x" << std::hex << static_cast<int>(value);
302template<
class char_t,
class char_traits_t>
303struct __tunit_value_printer<char_t, char_traits_t, const
xtd::
char32*> {
304 static void print(std::basic_ostream<char_t, char_traits_t>& os,
const xtd::char32*
const& value) {
306 for (
size_t index = 0; value[index] != L
'\0'; index++)
307 __tunit_value_printer<char_t, char_traits_t, xtd::char32>::print(os, value[index]);
311 static void print(std::basic_ostream<char_t, char_traits_t>& os,
const xtd::char32*& value) {
313 for (
size_t index = 0; value[index] != L
'\0'; index++)
314 __tunit_value_printer<char_t, char_traits_t, xtd::char32>::print(os, value[index]);
318 static void print(std::basic_ostream<char_t, char_traits_t>& os,
xtd::char32 value) {
320 os << static_cast<char>(value);
322 os <<
"\\x" << std::hex << static_cast<int>(value);
326template<
class char_t,
class char_traits_t>
327struct __tunit_value_printer<char_t, char_traits_t,
xtd::
char32> {
328 static void print(std::basic_ostream<char_t, char_traits_t>& os,
const xtd::char32*
const& value) {
330 for (
size_t index = 0; value[index] != L
'\0'; index++)
331 __tunit_value_printer<char_t, char_traits_t, xtd::char32>::print(os, value[index]);
335 static void print(std::basic_ostream<char_t, char_traits_t>& os,
const xtd::char32*& value) {
337 for (
size_t index = 0; value[index] != L
'\0'; index++)
338 __tunit_value_printer<char_t, char_traits_t, xtd::char32>::print(os, value[index]);
342 static void print(std::basic_ostream<char_t, char_traits_t>& os,
xtd::char32 value) {
344 os << static_cast<char>(value);
346 os <<
"\\x" << std::hex << static_cast<int>(value);
350template<
class char_t,
class char_traits_t>
351struct __tunit_value_printer<char_t, char_traits_t, const wchar_t*> {
352 static void print(std::basic_ostream<char_t, char_traits_t>& os,
const wchar_t*
const& value) {
354 for (
size_t index = 0; value[index] != L
'\0'; index++)
355 __tunit_value_printer<char_t, char_traits_t, wchar_t>::print(os, value[index]);
359 static void print(std::basic_ostream<char_t, char_traits_t>& os,
const wchar_t*& value) {
361 for (
size_t index = 0; value[index] != L
'\0'; index++)
362 __tunit_value_printer<char_t, char_traits_t, wchar_t>::print(os, value[index]);
366 static void print(std::basic_ostream<char_t, char_traits_t>& os,
wchar_t value) {
368 os << static_cast<char>(value);
370 os <<
"\\x" << std::hex << static_cast<int>(value);
374template<
class char_t,
class char_traits_t>
375struct __tunit_value_printer<char_t, char_traits_t, wchar_t> {
376 static void print(std::basic_ostream<char_t, char_traits_t>& os,
const wchar_t*
const& value) {
378 for (
size_t index = 0; value[index] != L
'\0'; index++)
379 __tunit_value_printer<char_t, char_traits_t, wchar_t>::print(os, value[index]);
383 static void print(std::basic_ostream<char_t, char_traits_t>& os,
const wchar_t*& value) {
385 for (
size_t index = 0; value[index] != L
'\0'; index++)
386 __tunit_value_printer<char_t, char_traits_t, wchar_t>::print(os, value[index]);
390 static void print(std::basic_ostream<char_t, char_traits_t>& os,
wchar_t value) {
392 os << static_cast<char>(value);
394 os <<
"\\x" << std::hex << static_cast<int>(value);
398template<
class char_t,
class char_traits_t,
class type1_t,
class type2_t>
399struct __tunit_value_printer<char_t, char_traits_t, std::pair<type1_t, type2_t>> {
400 static void print(std::basic_ostream<char_t, char_traits_t>& os,
const std::pair<type1_t, type2_t>& value) {
402 __tunit_value_printer<char_t, char_traits_t, type1_t>::print(os, value.first);
404 __tunit_value_printer<char_t, char_traits_t, type2_t>::print(os, value.second);
409template<
class char_t,
class char_traits_t,
class type_t,
unsigned N,
unsigned Last>
410struct __tuple_printer {
411 static void print(std::basic_ostream<char_t, char_traits_t>& os,
const type_t& value) {
412 __tunit_value_printer<char_t, char_traits_t, typename std::tuple_element<N, type_t>::type>::print(os, std::get<N>(value));
414 __tuple_printer < char_t, char_traits_t, type_t, N + 1, Last >::print(os, value);
418template<
class char_t,
class char_traits_t,
class type_t,
unsigned N>
419struct __tuple_printer<char_t, char_traits_t, type_t, N, N> {
420 static void print(std::basic_ostream<char_t, char_traits_t>& os,
const type_t& value) {
421 __tunit_value_printer<char_t, char_traits_t, typename std::tuple_element<N, type_t>::type>::print(os, std::get<N>(value));
425template<
class char_t,
class char_traits_t,
class ...types_t>
426struct __tunit_value_printer<char_t, char_traits_t, std::tuple<types_t ...>> {
427 static void print(std::basic_ostream<char_t, char_traits_t>& os,
const std::tuple<types_t ...>& value) {
429 __tuple_printer < char_t, char_traits_t, std::tuple<types_t ...>, 0,
sizeof...(types_t) - 1 >::print(os, value);
434template<
class char_t,
class char_traits_t>
435struct __tunit_value_printer<char_t, char_traits_t, std::tuple<>> {
436 static void print(std::basic_ostream<char_t, char_traits_t>& os,
const std::tuple<>&) {
441template<
class char_t,
class char_traits_t,
class iterator_t>
442std::basic_ostream<char_t, char_traits_t>& __print_sequence_container(std::basic_ostream<char_t, char_traits_t>& os,
const iterator_t& begin,
const iterator_t& end) {
445 for (iterator_t it = begin; it !=
end; ++it) {
446 if (!first) os <<
", ";
447 __tunit_value_printer<char_t, char_traits_t, typename std::iterator_traits<iterator_t>::value_type>::print(os, *it);
453template<
class char_t,
class char_traits_t,
class value_t,
size_t Size>
454struct __tunit_value_printer<char_t, char_traits_t, std::array<value_t, Size>> {
455 static void print(std::basic_ostream<char_t, char_traits_t>& os,
const std::array<value_t, Size>& values) {
456 __print_sequence_container(os, values.begin(), values.end());
460template<
class char_t,
class char_traits_t,
class value_t>
461struct __tunit_value_printer<char_t, char_traits_t, std::deque<value_t>> {
462 static void print(std::basic_ostream<char_t, char_traits_t>& os,
const std::deque<value_t>& values) {
463 __print_sequence_container(os, values.begin(), values.end());
467template<
class char_t,
class char_traits_t,
class value_t>
468struct __tunit_value_printer<char_t, char_traits_t, std::forward_list<value_t>> {
469 static void print(std::basic_ostream<char_t, char_traits_t>& os,
const std::forward_list<value_t>& values) {
470 __print_sequence_container(os, values.begin(), values.end());
474template<
class char_t,
class char_traits_t,
class value_t>
475struct __tunit_value_printer<char_t, char_traits_t, std::list<value_t>> {
476 static void print(std::basic_ostream<char_t, char_traits_t>& os,
const std::list<value_t>& values) {
477 __print_sequence_container(os, values.begin(), values.end());
481template<
class char_t,
class char_traits_t,
class value_t>
482struct __tunit_value_printer<char_t, char_traits_t, std::initializer_list<value_t>> {
483 static void print(std::basic_ostream<char_t, char_traits_t>& os,
const std::initializer_list<value_t>& values) {
484 __print_sequence_container(os, values.begin(), values.end());
488template<
class char_t,
class char_traits_t,
class value_t>
489struct __tunit_value_printer<char_t, char_traits_t, std::vector<value_t>> {
490 static void print(std::basic_ostream<char_t, char_traits_t>& os,
const std::vector<value_t>& values) {
491 __print_sequence_container(os, values.begin(), values.end());
495template<
class char_t,
class char_traits_t,
class iterator_t>
496std::basic_ostream<char_t, char_traits_t>& __print_associative_container(std::basic_ostream<char_t, char_traits_t>& os,
const iterator_t& begin,
const iterator_t& end) {
499 for (iterator_t it = begin; it !=
end; ++it) {
500 if (!first) os <<
", ";
501 __tunit_value_printer<char_t, char_traits_t, typename std::iterator_traits<iterator_t>::value_type>::print(os, *it);
507template<
class char_t,
class char_traits_t,
class key_t,
class value_t>
508struct __tunit_value_printer<char_t, char_traits_t, std::map<key_t, value_t>> {
509 static void print(std::basic_ostream<char_t, char_traits_t>& os,
const std::map<key_t, value_t>& values) {
510 __print_associative_container(os, values.begin(), values.end());
514template<
class char_t,
class char_traits_t,
class key_t,
class value_t>
515struct __tunit_value_printer<char_t, char_traits_t, std::multimap<key_t, value_t>> {
516 static void print(std::basic_ostream<char_t, char_traits_t>& os,
const std::multimap<key_t, value_t>& values) {
517 __print_associative_container(os, values.begin(), values.end());
521template<
class char_t,
class char_traits_t,
class value_t>
522struct __tunit_value_printer<char_t, char_traits_t, std::multiset<value_t>> {
523 static void print(std::basic_ostream<char_t, char_traits_t>& os,
const std::multiset<value_t>& values) {
524 __print_associative_container(os, values.begin(), values.end());
528template<
class char_t,
class char_traits_t,
class value_t>
529struct __tunit_value_printer<char_t, char_traits_t, std::set<value_t>> {
530 static void print(std::basic_ostream<char_t, char_traits_t>& os,
const std::set<value_t>& values) {
531 __print_associative_container(os, values.begin(), values.end());
535template<
class char_t,
class char_traits_t,
class key_t,
class value_t>
536struct __tunit_value_printer<char_t, char_traits_t, std::unordered_map<key_t, value_t>> {
537 static void print(std::basic_ostream<char_t, char_traits_t>& os,
const std::unordered_map<key_t, value_t>& values) {
538 __print_associative_container(os, values.begin(), values.end());
542template<
class char_t,
class char_traits_t,
class key_t,
class value_t>
543struct __tunit_value_printer<char_t, char_traits_t, std::unordered_multimap<key_t, value_t>> {
544 static void print(std::basic_ostream<char_t, char_traits_t>& os,
const std::unordered_multimap<key_t, value_t>& values) {
545 __print_associative_container(os, values.begin(), values.end());
549template<
class char_t,
class char_traits_t,
class value_t>
550struct __tunit_value_printer<char_t, char_traits_t, std::unordered_multiset<value_t>> {
551 static void print(std::basic_ostream<char_t, char_traits_t>& os,
const std::unordered_multiset<value_t>& values) {
552 __print_associative_container(os, values.begin(), values.end());
556template<
class char_t,
class char_traits_t,
class value_t>
557struct __tunit_value_printer<char_t, char_traits_t, std::unordered_set<value_t>> {
558 static void print(std::basic_ostream<char_t, char_traits_t>& os,
const std::unordered_set<value_t>& values) {
559 __print_associative_container(os, values.begin(), values.end());
563#if __XTD_CURRENT_TARGET_ID__ == __XTD_TARGET_ID_TEST_APPLICATION__
564template<
class char_t,
class char_traits_t,
class type_t>
565std::basic_ostream<char_t, char_traits_t>& operator <<(std::basic_ostream<char_t, char_traits_t>& os,
const type_t& value) {
566 __tunit_value_printer<char_t, char_traits_t, type_t>::print(os, value);
570template<
class char_t,
class char_traits_t,
class type_t>
571std::basic_ostream<char_t, char_traits_t>& operator <<(std::basic_ostream<char_t, char_traits_t>& os,
const type_t* value) {
572 __tunit_value_printer<char_t, char_traits_t, type_t>::print(os, value);
576template<
class char_t,
class char_traits_t,
class type_t>
577std::basic_ostream<char_t, char_traits_t>& operator <<(std::basic_ostream<char_t, char_traits_t>& os, type_t* value) {
578 __tunit_value_printer<char_t, char_traits_t, type_t>::print(os, value);
583inline std::string __tunit_codepoint_to_string(
xtd::char32 codepoint) {
585 if (codepoint < 0x80)
586 result.push_back(
static_cast<char>(codepoint));
587 else if (codepoint < 0x800) {
588 result.push_back(
static_cast<char>((codepoint >> 6) | 0xc0));
589 result.push_back(
static_cast<char>((codepoint & 0x3f) | 0x80));
590 }
else if (codepoint < 0x10000) {
591 result.push_back(
static_cast<char>((codepoint >> 12) | 0xe0));
592 result.push_back(
static_cast<char>(((codepoint >> 6) & 0x3f) | 0x80));
593 result.push_back(
static_cast<char>((codepoint & 0x3f) | 0x80));
595 result.push_back(
static_cast<char>((codepoint >> 18) | 0xf0));
596 result.push_back(
static_cast<char>(((codepoint >> 12) & 0x3f) | 0x80));
597 result.push_back(
static_cast<char>(((codepoint >> 6) & 0x3f) | 0x80));
598 result.push_back(
static_cast<char>((codepoint & 0x3f) | 0x80));
604 std::stringstream ss;
605 ss << std::quoted(__tunit_codepoint_to_string(value));
610 std::stringstream ss;
611 ss << std::quoted(__tunit_codepoint_to_string(value));
616 std::stringstream ss;
617 ss << std::quoted(__tunit_codepoint_to_string(value));
621inline xtd::string __tunit_to_string(
const wchar_t& value) {
622 std::stringstream ss;
623 ss << std::quoted(__tunit_codepoint_to_string(value));
627inline xtd::string __tunit_to_string(
const std::string& value) {
628 std::stringstream ss;
629 ss << std::quoted(value);
634 std::stringstream ss;
635 ss << std::quoted(value.chars());
639inline xtd::string __tunit_to_string(
const std::u8string& value) {
640 std::stringstream ss;
641 ss << std::quoted(value);
645inline xtd::string __tunit_to_string(
const std::u16string& value) {
648 for (
auto codepoint : value)
649 result += __tunit_codepoint_to_string(codepoint);
654inline xtd::string __tunit_to_string(
const std::u32string& value) {
657 for (
auto codepoint : value)
658 result += __tunit_codepoint_to_string(codepoint);
663inline xtd::string __tunit_to_string(
const std::wstring& value) {
666 for (
auto codepoint : value)
667 result += __tunit_codepoint_to_string(codepoint);
672inline xtd::string __tunit_to_string(
const void* value) {
673 std::stringstream ss;
674 ss <<
"\"" <<
reinterpret_cast<xtd::intptr>(value) <<
"\"";
679 std::stringstream ss;
680 ss <<
"\"" <<
reinterpret_cast<xtd::intptr>(value) <<
"\"";
684inline xtd::string __tunit_to_string(
const char* value) {
685 std::stringstream ss;
686 ss << std::quoted(value);
691 return __tunit_to_string(std::u8string(value));
695 return __tunit_to_string(std::u16string(value));
699 return __tunit_to_string(std::u32string(value));
702inline xtd::string __tunit_to_string(
const wchar_t* value) {
703 return __tunit_to_string(std::wstring(value));
706template<
class value_t>
707inline xtd::string __tunit_to_string(
const value_t& value) {
708 std::stringstream ss;
713template<
class value_t>
714inline xtd::string __tunit_to_string(
const value_t* value) {
715 std::stringstream ss;
716 ss << reinterpret_cast<xtd::intptr>(value);
720template<
class value_t>
721inline xtd::string __tunit_to_string(value_t* value) {
722 std::stringstream ss;
723 ss << reinterpret_cast<xtd::intptr>(value);
xtd::basic_string< xtd::char8 > u8string
Represents text as a sequence of UTF-8 code units.
Definition __string_definitions.hpp:76
xtd::basic_string< xtd::char32 > u32string
Represents text as a sequence of UTF-32 code units.
Definition __string_definitions.hpp:65
xtd::basic_string< char > string
Represents text as a sequence of UTF-8 code units.
Definition __string_definitions.hpp:43
xtd::basic_string< xtd::char16 > u16string
Represents text as a sequence of UTF-16 code units.
Definition __string_definitions.hpp:54
xtd::basic_string< xtd::wchar > wstring
Represents text as a sequence of UTF-16 code unit on Windows or UTF-32 code unit on non-Windows syste...
Definition __string_definitions.hpp:87
size_t size
Represents a size of any object in bytes.
Definition size.hpp:23
char8_t char8
Represents a 8-bit unicode character.
Definition char8.hpp:26
intmax_t intptr
Represent a pointer or a handle.
Definition intptr.hpp:23
char16_t char16
Represents a 16-bit unicode character.
Definition char16.hpp:26
std::optional< type_t > optional
Represents the optional alias on std::optional.
Definition optional.hpp:25
char32_t char32
Represents a 32-bit unicode character.
Definition char32.hpp:23
The xtd namespace contains all fundamental classes to access Hardware, Os, System,...
Definition abstract_object.hpp:8
read_only_span< type_t, count > first() const
Obtains a subspan consisting of the first count elements of the sequence.
Definition read_only_span.hpp:282
const_iterator end() const
Returns an iterator to the end.
Definition read_only_span.hpp:213
void print(FILE *file, arg_t &&value)
Writes the text representation of the specified value to the file output stream.
Definition print.hpp:19