xtd 0.2.0
Loading...
Searching...
No Matches
__default_insert_basic_ostream_operator.hpp
Go to the documentation of this file.
1
4#pragma once
6#if !defined(__XTD_TUNIT_INTERNAL__)
7#error "Do not include this file: Internal use only"
8#endif
10
11#include <algorithm>
12#include <array>
13#include <cstdint>
14#include <deque>
15#include <exception>
16#include <forward_list>
17#include <initializer_list>
18#include <iomanip>
19#include <iostream>
20#include <list>
21#include <map>
22#include <set>
23#include <stdexcept>
24#include <string>
25#include <sstream>
26#include <type_traits>
27#include <tuple>
28#include <unordered_map>
29#include <unordered_set>
30#include <utility>
31#include <vector>
32#include <xtd/optional>
33#include <xtd/target_id>
34#include <xtd/string>
35#include <xtd/stream_insertable>
36
38template<class value_t>
40inline static void __print(std::ostream& os, const value_t& value) {
41 os << value;
42}
43
44template<class value_t>
46inline static void __print(std::ostream& os, const value_t& value) {
47 auto size = std::min(sizeof(value), size_t {32});
48 os << size << "-byte object <";
49 for (size_t index = 0; index != size; index++)
50 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;
51 os << (size < sizeof(value) ? "-..." : "") << ">";
52}
53
54template<class value_t>
55inline static void __print(std::ostream& os, value_t* value) {
56 os << value;
57}
58
59template<class value_t>
60inline static void __print(std::ostream& os, const value_t* value) {
61 os << value;
62}
63
64template<class char_t, class char_traits_t, class value_t>
65struct __tunit_value_printer {
66 static void print(std::basic_ostream<char_t, char_traits_t>& os, const value_t*& value) {
67 __print(os, value);
68 }
69 static void print(std::basic_ostream<char_t, char_traits_t>& os, const value_t* const& value) {
70 __print(os, value);
71 }
72 static void print(std::basic_ostream<char_t, char_traits_t>& os, const value_t& value) {
73 __print(os, value);
74 }
75};
76
77template<class char_t, class char_traits_t>
78struct __tunit_value_printer<char_t, char_traits_t, std::exception> {
79 static void print(std::basic_ostream<char_t, char_traits_t>& os, const std::exception& value) {
80 os << "exception: " << value.what();
81 }
82};
83
84template<class char_t, class char_traits_t, class value_t>
85struct __tunit_value_printer<char_t, char_traits_t, std::optional<value_t>> {
86 static void print(std::basic_ostream<char_t, char_traits_t>& os, const std::optional<value_t>& value) {
87 if (!value.has_value())
88 os << "(null)";
89 else {
90 os << "(";
91 __tunit_value_printer<char_t, char_traits_t, value_t>::print(os, value.value());
92 os << ")";
93 }
94 }
95};
96
97template<class char_t, class char_traits_t>
98struct __tunit_value_printer<char_t, char_traits_t, std::string> {
99 static void print(std::basic_ostream<char_t, char_traits_t>& os, const std::string & value) {
100 os << xtd::string(value).quoted().chars();
101 }
102};
103
104template<class char_t, class char_traits_t>
105struct __tunit_value_printer<char_t, char_traits_t, xtd::string> {
106 static void print(std::basic_ostream<char_t, char_traits_t>& os, const std::string & value) {
107 os << xtd::string(value).quoted().chars();
108 }
109};
110
111template<class char_t, class char_traits_t>
112struct __tunit_value_printer<char_t, char_traits_t, std::u8string> {
113 static void print(std::basic_ostream<char_t, char_traits_t>& os, const std::u8string & value) {
114 __tunit_value_printer<char_t, char_traits_t, xtd::char8>::print(os, value.c_str());
115 }
116};
117
118template<class char_t, class char_traits_t>
119struct __tunit_value_printer<char_t, char_traits_t, std::u16string> {
120 static void print(std::basic_ostream<char_t, char_traits_t>& os, const std::u16string & value) {
121 __tunit_value_printer<char_t, char_traits_t, xtd::char16>::print(os, value.c_str());
122 }
123};
124
125template<class char_t, class char_traits_t>
126struct __tunit_value_printer<char_t, char_traits_t, std::u32string> {
127 static void print(std::basic_ostream<char_t, char_traits_t>& os, const std::u32string & value) {
128 __tunit_value_printer<char_t, char_traits_t, xtd::char32>::print(os, value.c_str());
129 }
130};
131
132template<class char_t, class char_traits_t>
133struct __tunit_value_printer<char_t, char_traits_t, std::wstring> {
134 static void print(std::basic_ostream<char_t, char_traits_t>& os, const std::wstring & value) {
135 __tunit_value_printer<char_t, char_traits_t, wchar_t>::print(os, value.c_str());
136 }
137};
138
139template<class char_t, class char_traits_t>
140struct __tunit_value_printer<char_t, char_traits_t, const char*> {
141 static void print(std::basic_ostream<char_t, char_traits_t>& os, const char* const & value) {
142 os << xtd::string(value).quoted().chars();
143 }
144
145 static void print(std::basic_ostream<char_t, char_traits_t>& os, const char*& value) {
146 os << xtd::string(value).quoted().chars();
147 }
148
149 static void print(std::basic_ostream<char_t, char_traits_t>& os, char value) {
150 os << value;
151 }
152};
153
154template<class char_t, class char_traits_t>
155struct __tunit_value_printer<char_t, char_traits_t, char> {
156 static void print(std::basic_ostream<char_t, char_traits_t>& os, const char* const & value) {
157 os << xtd::string(value).quoted().chars();
158 }
159
160 static void print(std::basic_ostream<char_t, char_traits_t>& os, const char*& value) {
161 os << xtd::string(value).quoted().chars();
162 }
163
164 static void print(std::basic_ostream<char_t, char_traits_t>& os, char value) {
165 os << value;
166 }
167};
168
169template<class char_t, class char_traits_t>
170struct __tunit_value_printer<char_t, char_traits_t, const xtd::char8*> {
171 static void print(std::basic_ostream<char_t, char_traits_t>& os, const xtd::char8* const & value) {
172 os << "\"";
173 for (size_t index = 0; value[index] != '\0'; index++)
174 __tunit_value_printer<char_t, char_traits_t, xtd::char8>::print(os, value[index]);
175 os << "\"";
176 }
177
178 static void print(std::basic_ostream<char_t, char_traits_t>& os, const xtd::char8*& value) {
179 os << "\"";
180 for (size_t index = 0; value[index] != '\0'; index++)
181 __tunit_value_printer<char_t, char_traits_t, xtd::char8>::print(os, value[index]);
182 os << "\"";
183 }
184
185 static void print(std::basic_ostream<char_t, char_traits_t>& os, xtd::char8 value) {
186 if (static_cast<int>(value) <= 0xFF)
187 os << static_cast<char>(value);
188 else
189 os << "\\x" << std::hex << static_cast<int>(value);
190 }
191};
192
193template<class char_t, class char_traits_t>
194struct __tunit_value_printer<char_t, char_traits_t, xtd::char8> {
195 static void print(std::basic_ostream<char_t, char_traits_t>& os, const xtd::char8* const & value) {
196 os << "\"";
197 for (size_t index = 0; value[index] != '\0'; index++)
198 __tunit_value_printer<char_t, char_traits_t, xtd::char8>::print(os, value[index]);
199 os << "\"";
200 }
201
202 static void print(std::basic_ostream<char_t, char_traits_t>& os, const xtd::char8*& value) {
203 os << "\"";
204 for (size_t index = 0; value[index] != '\0'; index++)
205 __tunit_value_printer<char_t, char_traits_t, xtd::char8>::print(os, value[index]);
206 os << "\"";
207 }
208
209 static void print(std::basic_ostream<char_t, char_traits_t>& os, xtd::char8 value) {
210 os << static_cast<char>(value);
211 }
212};
213
214template<class char_t, class char_traits_t>
215struct __tunit_value_printer<char_t, char_traits_t, const xtd::char16*> {
216 static void print(std::basic_ostream<char_t, char_traits_t>& os, const xtd::char16* const & value) {
217 os << "\"";
218 for (size_t index = 0; value[index] != '\0'; index++)
219 __tunit_value_printer<char_t, char_traits_t, xtd::char16>::print(os, value[index]);
220 os << "\"";
221 }
222
223 static void print(std::basic_ostream<char_t, char_traits_t>& os, const xtd::char16*& value) {
224 os << "\"";
225 for (size_t index = 0; value[index] != L'\0'; index++)
226 __tunit_value_printer<char_t, char_traits_t, xtd::char16>::print(os, value[index]);
227 os << "\"";
228 }
229
230 static void print(std::basic_ostream<char_t, char_traits_t>& os, xtd::char16 value) {
231 if (value <= 0xFF)
232 os << static_cast<char>(value);
233 else
234 os << "\\x" << std::hex << static_cast<int>(value);
235 }
236};
237
238template<class char_t, class char_traits_t>
239struct __tunit_value_printer<char_t, char_traits_t, xtd::char16> {
240 static void print(std::basic_ostream<char_t, char_traits_t>& os, const xtd::char16* const & value) {
241 os << "\"";
242 for (size_t index = 0; value[index] != L'\0'; index++)
243 __tunit_value_printer<char_t, char_traits_t, xtd::char16>::print(os, value[index]);
244 os << "\"";
245 }
246
247 static void print(std::basic_ostream<char_t, char_traits_t>& os, const xtd::char16*& value) {
248 os << "\"";
249 for (size_t index = 0; value[index] != L'\0'; index++)
250 __tunit_value_printer<char_t, char_traits_t, xtd::char16>::print(os, value[index]);
251 os << "\"";
252 }
253
254 static void print(std::basic_ostream<char_t, char_traits_t>& os, xtd::char16 value) {
255 if (value <= 0xFF)
256 os << static_cast<char>(value);
257 else
258 os << "\\x" << std::hex << static_cast<int>(value);
259 }
260};
261
262template<class char_t, class char_traits_t>
263struct __tunit_value_printer<char_t, char_traits_t, const xtd::char32*> {
264 static void print(std::basic_ostream<char_t, char_traits_t>& os, const xtd::char32* const & value) {
265 os << "\"";
266 for (size_t index = 0; value[index] != L'\0'; index++)
267 __tunit_value_printer<char_t, char_traits_t, xtd::char32>::print(os, value[index]);
268 os << "\"";
269 }
270
271 static void print(std::basic_ostream<char_t, char_traits_t>& os, const xtd::char32*& value) {
272 os << "\"";
273 for (size_t index = 0; value[index] != L'\0'; index++)
274 __tunit_value_printer<char_t, char_traits_t, xtd::char32>::print(os, value[index]);
275 os << "\"";
276 }
277
278 static void print(std::basic_ostream<char_t, char_traits_t>& os, xtd::char32 value) {
279 if (value <= 0xFF)
280 os << static_cast<char>(value);
281 else
282 os << "\\x" << std::hex << static_cast<int>(value);
283 }
284};
285
286template<class char_t, class char_traits_t>
287struct __tunit_value_printer<char_t, char_traits_t, xtd::char32> {
288 static void print(std::basic_ostream<char_t, char_traits_t>& os, const xtd::char32* const & value) {
289 os << "\"";
290 for (size_t index = 0; value[index] != L'\0'; index++)
291 __tunit_value_printer<char_t, char_traits_t, xtd::char32>::print(os, value[index]);
292 os << "\"";
293 }
294
295 static void print(std::basic_ostream<char_t, char_traits_t>& os, const xtd::char32*& value) {
296 os << "\"";
297 for (size_t index = 0; value[index] != L'\0'; index++)
298 __tunit_value_printer<char_t, char_traits_t, xtd::char32>::print(os, value[index]);
299 os << "\"";
300 }
301
302 static void print(std::basic_ostream<char_t, char_traits_t>& os, xtd::char32 value) {
303 if (value <= 0xFF)
304 os << static_cast<char>(value);
305 else
306 os << "\\x" << std::hex << static_cast<int>(value);
307 }
308};
309
310template<class char_t, class char_traits_t>
311struct __tunit_value_printer<char_t, char_traits_t, const wchar_t*> {
312 static void print(std::basic_ostream<char_t, char_traits_t>& os, const wchar_t* const & value) {
313 os << "\"";
314 for (size_t index = 0; value[index] != L'\0'; index++)
315 __tunit_value_printer<char_t, char_traits_t, wchar_t>::print(os, value[index]);
316 os << "\"";
317 }
318
319 static void print(std::basic_ostream<char_t, char_traits_t>& os, const wchar_t*& value) {
320 os << "\"";
321 for (size_t index = 0; value[index] != L'\0'; index++)
322 __tunit_value_printer<char_t, char_traits_t, wchar_t>::print(os, value[index]);
323 os << "\"";
324 }
325
326 static void print(std::basic_ostream<char_t, char_traits_t>& os, wchar_t value) {
327 if (value <= 0xFF)
328 os << static_cast<char>(value);
329 else
330 os << "\\x" << std::hex << static_cast<int>(value);
331 }
332};
333
334template<class char_t, class char_traits_t>
335struct __tunit_value_printer<char_t, char_traits_t, wchar_t> {
336 static void print(std::basic_ostream<char_t, char_traits_t>& os, const wchar_t* const & value) {
337 os << "\"";
338 for (size_t index = 0; value[index] != L'\0'; index++)
339 __tunit_value_printer<char_t, char_traits_t, wchar_t>::print(os, value[index]);
340 os << "\"";
341 }
342
343 static void print(std::basic_ostream<char_t, char_traits_t>& os, const wchar_t*& value) {
344 os << "\"";
345 for (size_t index = 0; value[index] != L'\0'; index++)
346 __tunit_value_printer<char_t, char_traits_t, wchar_t>::print(os, value[index]);
347 os << "\"";
348 }
349
350 static void print(std::basic_ostream<char_t, char_traits_t>& os, wchar_t value) {
351 if (value <= 0xFF)
352 os << static_cast<char>(value);
353 else
354 os << "\\x" << std::hex << static_cast<int>(value);
355 }
356};
357
358template<class char_t, class char_traits_t, class type1_t, class type2_t>
359struct __tunit_value_printer<char_t, char_traits_t, std::pair<type1_t, type2_t>> {
360 static void print(std::basic_ostream<char_t, char_traits_t>& os, const std::pair<type1_t, type2_t>& value) {
361 os << "(";
362 __tunit_value_printer<char_t, char_traits_t, type1_t>::print(os, value.first);
363 os << ", ";
364 __tunit_value_printer<char_t, char_traits_t, type2_t>::print(os, value.second);
365 os << ")";
366 }
367};
368
369template<class char_t, class char_traits_t, class type_t, unsigned N, unsigned Last>
370struct __tuple_printer {
371 static void print(std::basic_ostream < char_t, char_traits_t >& os, const type_t& value) {
372 __tunit_value_printer < char_t, char_traits_t, typename std::tuple_element < N, type_t>::type>::print(os, std::get < N > (value));
373 os << ", ";
374 __tuple_printer < char_t, char_traits_t, type_t, N + 1, Last >::print(os, value);
375 }
376};
377
378template < class char_t, class char_traits_t, class type_t, unsigned N >
379struct __tuple_printer < char_t, char_traits_t, type_t, N, N > {
380 static void print(std::basic_ostream < char_t, char_traits_t >& os, const type_t& value) {
381 __tunit_value_printer < char_t, char_traits_t, typename std::tuple_element < N, type_t>::type>::print(os, std::get < N > (value));
382 }
383};
384
385template < class char_t, class char_traits_t, class ...types_t >
386struct __tunit_value_printer < char_t, char_traits_t, std::tuple < types_t ...>> {
387 static void print(std::basic_ostream < char_t, char_traits_t >& os, const std::tuple < types_t ... >& value) {
388 os << "(";
389 __tuple_printer < char_t, char_traits_t, std::tuple < types_t ...>, 0, sizeof...(types_t) - 1 >::print(os, value);
390 os << ")";
391 }
392};
393
394template < class char_t, class char_traits_t >
395struct __tunit_value_printer < char_t, char_traits_t, std::tuple < >> {
396 static void print(std::basic_ostream < char_t, char_traits_t >& os, const std::tuple < >&) {
397 os << "()";
398 }
399};
400
401template < class char_t, class char_traits_t, class iterator_t >
402std::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) {
403 os << "[";
404 bool first = true;
405 for (iterator_t it = begin; it != end; ++it) {
406 if (!first) os << ", ";
407 __tunit_value_printer < char_t, char_traits_t, typename std::iterator_traits < iterator_t>::value_type >::print(os, *it);
408 first = false;
409 }
410 return os << "]";
411}
412
413template < class char_t, class char_traits_t, class value_t, size_t Size >
414struct __tunit_value_printer < char_t, char_traits_t, std::array < value_t, Size>> {
415 static void print(std::basic_ostream < char_t, char_traits_t >& os, const std::array < value_t, Size >& values) {
416 __print_sequence_container(os, values.begin(), values.end());
417 }
418};
419
420template < class char_t, class char_traits_t, class value_t >
421struct __tunit_value_printer < char_t, char_traits_t, std::deque < value_t>> {
422 static void print(std::basic_ostream < char_t, char_traits_t >& os, const std::deque < value_t >& values) {
423 __print_sequence_container(os, values.begin(), values.end());
424 }
425};
426
427template < class char_t, class char_traits_t, class value_t >
428struct __tunit_value_printer < char_t, char_traits_t, std::forward_list < value_t>> {
429 static void print(std::basic_ostream < char_t, char_traits_t >& os, const std::forward_list < value_t >& values) {
430 __print_sequence_container(os, values.begin(), values.end());
431 }
432};
433
434template < class char_t, class char_traits_t, class value_t >
435struct __tunit_value_printer < char_t, char_traits_t, std::list < value_t>> {
436 static void print(std::basic_ostream < char_t, char_traits_t >& os, const std::list < value_t >& values) {
437 __print_sequence_container(os, values.begin(), values.end());
438 }
439};
440
441template < class char_t, class char_traits_t, class value_t >
442struct __tunit_value_printer < char_t, char_traits_t, std::initializer_list < value_t>> {
443 static void print(std::basic_ostream < char_t, char_traits_t >& os, const std::initializer_list < value_t >& values) {
444 __print_sequence_container(os, values.begin(), values.end());
445 }
446};
447
448template < class char_t, class char_traits_t, class value_t >
449struct __tunit_value_printer < char_t, char_traits_t, std::vector < value_t>> {
450 static void print(std::basic_ostream < char_t, char_traits_t >& os, const std::vector < value_t >& values) {
451 __print_sequence_container(os, values.begin(), values.end());
452 }
453};
454
455template < class char_t, class char_traits_t, class iterator_t >
456std::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) {
457 os << "{";
458 bool first = true;
459 for (iterator_t it = begin; it != end; ++it) {
460 if (!first) os << ", ";
461 __tunit_value_printer < char_t, char_traits_t, typename std::iterator_traits < iterator_t>::value_type >::print(os, *it);
462 first = false;
463 }
464 return os << "}";
465}
466
467template < class char_t, class char_traits_t, class key_t, class value_t >
468struct __tunit_value_printer < char_t, char_traits_t, std::map < key_t, value_t>> {
469 static void print(std::basic_ostream < char_t, char_traits_t >& os, const std::map < key_t, value_t >& values) {
470 __print_associative_container(os, values.begin(), values.end());
471 }
472};
473
474template < class char_t, class char_traits_t, class key_t, class value_t >
475struct __tunit_value_printer < char_t, char_traits_t, std::multimap < key_t, value_t>> {
476 static void print(std::basic_ostream < char_t, char_traits_t >& os, const std::multimap < key_t, value_t >& values) {
477 __print_associative_container(os, values.begin(), values.end());
478 }
479};
480
481template < class char_t, class char_traits_t, class value_t >
482struct __tunit_value_printer < char_t, char_traits_t, std::multiset < value_t>> {
483 static void print(std::basic_ostream < char_t, char_traits_t >& os, const std::multiset < value_t >& values) {
484 __print_associative_container(os, values.begin(), values.end());
485 }
486};
487
488template < class char_t, class char_traits_t, class value_t >
489struct __tunit_value_printer < char_t, char_traits_t, std::set < value_t>> {
490 static void print(std::basic_ostream < char_t, char_traits_t >& os, const std::set < value_t >& values) {
491 __print_associative_container(os, values.begin(), values.end());
492 }
493};
494
495template < class char_t, class char_traits_t, class key_t, class value_t >
496struct __tunit_value_printer < char_t, char_traits_t, std::unordered_map < key_t, value_t>> {
497 static void print(std::basic_ostream < char_t, char_traits_t >& os, const std::unordered_map < key_t, value_t >& values) {
498 __print_associative_container(os, values.begin(), values.end());
499 }
500};
501
502template < class char_t, class char_traits_t, class key_t, class value_t >
503struct __tunit_value_printer < char_t, char_traits_t, std::unordered_multimap < key_t, value_t>> {
504 static void print(std::basic_ostream < char_t, char_traits_t >& os, const std::unordered_multimap < key_t, value_t >& values) {
505 __print_associative_container(os, values.begin(), values.end());
506 }
507};
508
509template < class char_t, class char_traits_t, class value_t >
510struct __tunit_value_printer < char_t, char_traits_t, std::unordered_multiset < value_t>> {
511 static void print(std::basic_ostream < char_t, char_traits_t >& os, const std::unordered_multiset < value_t >& values) {
512 __print_associative_container(os, values.begin(), values.end());
513 }
514};
515
516template < class char_t, class char_traits_t, class value_t >
517struct __tunit_value_printer < char_t, char_traits_t, std::unordered_set < value_t>> {
518 static void print(std::basic_ostream < char_t, char_traits_t >& os, const std::unordered_set < value_t >& values) {
519 __print_associative_container(os, values.begin(), values.end());
520 }
521};
522
523#if __XTD_CURRENT_TARGET_ID__ == __XTD_TARGET_ID_TEST_APPLICATION__
524template < class char_t, class char_traits_t, class type_t >
525std::basic_ostream < char_t, char_traits_t >& operator <<(std::basic_ostream < char_t, char_traits_t >& os, const type_t& value) {
526 __tunit_value_printer < char_t, char_traits_t, type_t >::print(os, value);
527 return os;
528}
529
530template < class char_t, class char_traits_t, class type_t >
531std::basic_ostream < char_t, char_traits_t >& operator <<(std::basic_ostream < char_t, char_traits_t >& os, const type_t* value) {
532 __tunit_value_printer < char_t, char_traits_t, type_t >::print(os, value);
533 return os;
534}
535
536template < class char_t, class char_traits_t, class type_t >
537std::basic_ostream < char_t, char_traits_t >& operator <<(std::basic_ostream < char_t, char_traits_t >& os, type_t* value) {
538 __tunit_value_printer < char_t, char_traits_t, type_t >::print(os, value);
539 return os;
540}
541#endif
542
543inline std::string __tunit_codepoint_to_string(xtd::char32 codepoint) {
544 std::string result;
545 if (codepoint < 0x80)
546 result.push_back(static_cast < char > (codepoint));
547 else if (codepoint < 0x800) {
548 result.push_back(static_cast < char > ((codepoint >> 6) | 0xc0));
549 result.push_back(static_cast < char > ((codepoint & 0x3f) | 0x80));
550 } else if (codepoint < 0x10000) {
551 result.push_back(static_cast < char > ((codepoint >> 12) | 0xe0));
552 result.push_back(static_cast < char > (((codepoint >> 6) & 0x3f) | 0x80));
553 result.push_back(static_cast < char > ((codepoint & 0x3f) | 0x80));
554 } else {
555 result.push_back(static_cast < char > ((codepoint >> 18) | 0xf0));
556 result.push_back(static_cast < char > (((codepoint >> 12) & 0x3f) | 0x80));
557 result.push_back(static_cast < char > (((codepoint >> 6) & 0x3f) | 0x80));
558 result.push_back(static_cast < char > ((codepoint & 0x3f) | 0x80));
559 }
560 return result;
561}
562
563inline xtd::string __tunit_to_string(const xtd::char8& value) {
564 std::stringstream ss;
565 ss << xtd::string(__tunit_codepoint_to_string(value)).quoted().chars();
566 return ss.str();
567}
568
569inline xtd::string __tunit_to_string(const xtd::char16& value) {
570 std::stringstream ss;
571 ss << xtd::string(__tunit_codepoint_to_string(value)).quoted().chars();
572 return ss.str();
573}
574
575inline xtd::string __tunit_to_string(const xtd::char32& value) {
576 std::stringstream ss;
577 ss << xtd::string(__tunit_codepoint_to_string(value)).quoted().chars();
578 return ss.str();
579}
580
581inline xtd::string __tunit_to_string(const wchar_t& value) {
582 std::stringstream ss;
583 ss << xtd::string(__tunit_codepoint_to_string(value)).quoted().chars();
584 return ss.str();
585}
586
587inline xtd::string __tunit_to_string(const std::string& value) {
588 std::stringstream ss;
589 ss << xtd::string(value).quoted().chars();
590 return ss.str();
591}
592
593inline xtd::string __tunit_to_string(const xtd::string& value) {
594 std::stringstream ss;
595 ss << value.quoted().chars();
596 return ss.str();
597}
598
599inline xtd::string __tunit_to_string(const std::u8string& value) {
600 std::stringstream ss;
601 ss << xtd::string(value).quoted().chars();
602 return ss.str();
603}
604
605inline xtd::string __tunit_to_string(const std::u16string& value) {
606 std::string result;
607 result += "\"";
608 for (auto codepoint : value)
609 result += __tunit_codepoint_to_string(codepoint);
610 result += "\"";
611 return result;
612}
613
614inline xtd::string __tunit_to_string(const std::u32string& value) {
615 std::string result;
616 result += "\"";
617 for (auto codepoint : value)
618 result += __tunit_codepoint_to_string(codepoint);
619 result += "\"";
620 return result;
621}
622
623inline xtd::string __tunit_to_string(const std::wstring& value) {
624 std::string result;
625 result += "\"";
626 for (auto codepoint : value)
627 result += __tunit_codepoint_to_string(codepoint);
628 result += "\"";
629 return result;
630}
631
632inline xtd::string __tunit_to_string(const void* value) {
633 std::stringstream ss;
634 ss << "\"" << reinterpret_cast < xtd::intptr > (value) << "\"";
635 return ss.str();
636}
637
638inline xtd::string __tunit_to_string(void* value) {
639 std::stringstream ss;
640 ss << "\"" << reinterpret_cast < xtd::intptr > (value) << "\"";
641 return ss.str();
642}
643
644inline xtd::string __tunit_to_string(const char* value) {
645 std::stringstream ss;
646 ss << xtd::string(value).quoted().chars();
647 return ss.str();
648}
649
650inline xtd::string __tunit_to_string(const xtd::char8* value) {
651 return __tunit_to_string(std::u8string(value));
652}
653
654inline xtd::string __tunit_to_string(const xtd::char16* value) {
655 return __tunit_to_string(std::u16string(value));
656}
657
658inline xtd::string __tunit_to_string(const xtd::char32* value) {
659 return __tunit_to_string(std::u32string(value));
660}
661
662inline xtd::string __tunit_to_string(const wchar_t* value) {
663 return __tunit_to_string(std::wstring(value));
664}
665
666template < class value_t >
667inline xtd::string __tunit_to_string(const value_t& value) {
668 std::stringstream ss;
669 ss << value;
670 return ss.str();
671}
672
673template < class value_t >
674inline xtd::string __tunit_to_string(const value_t* value) {
675 std::stringstream ss;
676 ss << reinterpret_cast < xtd::intptr > (value);
677 return ss.str();
678}
679
680template < class value_t >
681inline xtd::string __tunit_to_string(value_t* value) {
682 std::stringstream ss;
683 ss << reinterpret_cast < xtd::intptr > (value);
684 return ss.str();
685}
const base_type & chars() const noexcept
Returns a reference to the underlying base type.
Definition basic_string.hpp:354
Definition stream_insertable.hpp:30
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
std::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:26
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