6#if !defined(__XTD_TUNIT_INTERNAL__)
7#error "Do not include this file: Internal use only"
16#include <forward_list>
17#include <initializer_list>
28#include <unordered_map>
29#include <unordered_set>
32#include <xtd/optional>
33#include <xtd/target_id>
35#include <xtd/is_stream_insertable>
38template<
class char_t,
class char_traits_t,
class value_t>
39inline static void __tunit_print_value(std::basic_ostream<char_t, char_traits_t>& os,
const value_t& value) {
42 auto size = std::min(
sizeof(value),
size_t {32});
43 os <<
size <<
"-byte object <";
44 for (
size_t index = 0; index !=
size; index++)
45 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;
46 os << (
size <
sizeof(value) ?
"-..." :
"") <<
">";
50template<
class char_t,
class char_traits_t,
class value_t>
51inline static void __tunit_print_value(std::basic_ostream<char_t, char_traits_t>& os, value_t* value) {
52 os.operator << (value);
55template<
class char_t,
class char_traits_t,
class value_t>
56inline static void __tunit_print_value(std::basic_ostream<char_t, char_traits_t>& os,
const value_t* value) {
57 os.operator << (value);
60template<
class char_t,
class char_traits_t,
class value_t>
61inline static void __print(std::basic_ostream<char_t, char_traits_t>& os,
const value_t& value) {
62 __tunit_print_value(os, value);
65template<
class char_t,
class char_traits_t,
class value_t>
66inline static void __print(std::basic_ostream<char_t, char_traits_t>& os, value_t* value) {
67 __tunit_print_value(os, value);
70template<
class char_t,
class char_traits_t,
class value_t>
71inline static void __print(std::basic_ostream<char_t, char_traits_t>& os,
const value_t* value) {
72 __tunit_print_value(os, value);
75template<
class char_t,
class char_traits_t,
class value_t>
76struct __tunit_value_printer {
77 static void print(std::basic_ostream<char_t, char_traits_t>& os,
const value_t*& value) {
80 static void print(std::basic_ostream<char_t, char_traits_t>& os,
const value_t*
const& value) {
83 static void print(std::basic_ostream<char_t, char_traits_t>& os,
const value_t& value) {
88template<
class char_t,
class char_traits_t>
89struct __tunit_value_printer<char_t, char_traits_t, std::exception> {
90 static void print(std::basic_ostream<char_t, char_traits_t>& os,
const std::exception& value) {
91 os <<
"exception: " << value.what();
95template<
class char_t,
class char_traits_t,
class value_t>
96struct __tunit_value_printer<char_t, char_traits_t, std::
optional<value_t>> {
97 static void print(std::basic_ostream<char_t, char_traits_t>& os,
const std::optional<value_t>& value) {
98 if (!value.has_value())
102 __tunit_value_printer<char_t, char_traits_t, value_t>::print(os, value.value());
108template<
class char_t,
class char_traits_t>
109struct __tunit_value_printer<char_t, char_traits_t, std::
string> {
110 static void print(std::basic_ostream<char_t, char_traits_t>& os,
const std::string & value) {
115template<
class char_t,
class char_traits_t>
116struct __tunit_value_printer<char_t, char_traits_t,
xtd::
string> {
117 static void print(std::basic_ostream<char_t, char_traits_t>& os,
const std::string & value) {
122template<
class char_t,
class char_traits_t>
123struct __tunit_value_printer<char_t, char_traits_t, std::
u8string> {
124 static void print(std::basic_ostream<char_t, char_traits_t>& os,
const std::u8string & value) {
125 __tunit_value_printer<char_t, char_traits_t, xtd::char8>::print(os, value.c_str());
129template<
class char_t,
class char_traits_t>
130struct __tunit_value_printer<char_t, char_traits_t, std::
u16string> {
131 static void print(std::basic_ostream<char_t, char_traits_t>& os,
const std::u16string & value) {
132 __tunit_value_printer<char_t, char_traits_t, xtd::char16>::print(os, value.c_str());
136template<
class char_t,
class char_traits_t>
137struct __tunit_value_printer<char_t, char_traits_t, std::
u32string> {
138 static void print(std::basic_ostream<char_t, char_traits_t>& os,
const std::u32string & value) {
139 __tunit_value_printer<char_t, char_traits_t, xtd::char32>::print(os, value.c_str());
143template<
class char_t,
class char_traits_t>
144struct __tunit_value_printer<char_t, char_traits_t, std::
wstring> {
145 static void print(std::basic_ostream<char_t, char_traits_t>& os,
const std::wstring & value) {
146 __tunit_value_printer<char_t, char_traits_t, wchar_t>::print(os, value.c_str());
150template<
class char_t,
class char_traits_t>
151struct __tunit_value_printer<char_t, char_traits_t, const char*> {
152 static void print(std::basic_ostream<char_t, char_traits_t>& os,
const char*
const & value) {
156 static void print(std::basic_ostream<char_t, char_traits_t>& os,
const char*& value) {
160 static void print(std::basic_ostream<char_t, char_traits_t>& os,
char value) {
165template<
class char_t,
class char_traits_t>
166struct __tunit_value_printer<char_t, char_traits_t, char> {
167 static void print(std::basic_ostream<char_t, char_traits_t>& os,
const char*
const & value) {
171 static void print(std::basic_ostream<char_t, char_traits_t>& os,
const char*& value) {
175 static void print(std::basic_ostream<char_t, char_traits_t>& os,
char value) {
180template<
class char_t,
class char_traits_t>
181struct __tunit_value_printer<char_t, char_traits_t, const
xtd::
char8*> {
182 static void print(std::basic_ostream<char_t, char_traits_t>& os,
const xtd::char8*
const & value) {
184 for (
size_t index = 0; value[index] !=
'\0'; index++)
185 __tunit_value_printer<char_t, char_traits_t, xtd::char8>::print(os, value[index]);
189 static void print(std::basic_ostream<char_t, char_traits_t>& os,
const xtd::char8*& value) {
191 for (
size_t index = 0; value[index] !=
'\0'; index++)
192 __tunit_value_printer<char_t, char_traits_t, xtd::char8>::print(os, value[index]);
196 static void print(std::basic_ostream<char_t, char_traits_t>& os,
xtd::char8 value) {
197 if (
static_cast<int>(value) <= 0xFF)
198 os << static_cast<char>(value);
200 os <<
"\\x" << std::hex << static_cast<int>(value);
204template<
class char_t,
class char_traits_t>
205struct __tunit_value_printer<char_t, char_traits_t,
xtd::
char8> {
206 static void print(std::basic_ostream<char_t, char_traits_t>& os,
const xtd::char8*
const & value) {
208 for (
size_t index = 0; value[index] !=
'\0'; index++)
209 __tunit_value_printer<char_t, char_traits_t, xtd::char8>::print(os, value[index]);
213 static void print(std::basic_ostream<char_t, char_traits_t>& os,
const xtd::char8*& value) {
215 for (
size_t index = 0; value[index] !=
'\0'; index++)
216 __tunit_value_printer<char_t, char_traits_t, xtd::char8>::print(os, value[index]);
220 static void print(std::basic_ostream<char_t, char_traits_t>& os,
xtd::char8 value) {
221 os << static_cast<char>(value);
225template<
class char_t,
class char_traits_t>
226struct __tunit_value_printer<char_t, char_traits_t, const
xtd::
char16*> {
227 static void print(std::basic_ostream<char_t, char_traits_t>& os,
const xtd::char16*
const & value) {
229 for (
size_t index = 0; value[index] !=
'\0'; index++)
230 __tunit_value_printer<char_t, char_traits_t, xtd::char16>::print(os, value[index]);
234 static void print(std::basic_ostream<char_t, char_traits_t>& os,
const xtd::char16*& value) {
236 for (
size_t index = 0; value[index] != L
'\0'; index++)
237 __tunit_value_printer<char_t, char_traits_t, xtd::char16>::print(os, value[index]);
241 static void print(std::basic_ostream<char_t, char_traits_t>& os,
xtd::char16 value) {
243 os << static_cast<char>(value);
245 os <<
"\\x" << std::hex << static_cast<int>(value);
249template<
class char_t,
class char_traits_t>
250struct __tunit_value_printer<char_t, char_traits_t,
xtd::
char16> {
251 static void print(std::basic_ostream<char_t, char_traits_t>& os,
const xtd::char16*
const & value) {
253 for (
size_t index = 0; value[index] != L
'\0'; index++)
254 __tunit_value_printer<char_t, char_traits_t, xtd::char16>::print(os, value[index]);
258 static void print(std::basic_ostream<char_t, char_traits_t>& os,
const xtd::char16*& value) {
260 for (
size_t index = 0; value[index] != L
'\0'; index++)
261 __tunit_value_printer<char_t, char_traits_t, xtd::char16>::print(os, value[index]);
265 static void print(std::basic_ostream<char_t, char_traits_t>& os,
xtd::char16 value) {
267 os << static_cast<char>(value);
269 os <<
"\\x" << std::hex << static_cast<int>(value);
273template<
class char_t,
class char_traits_t>
274struct __tunit_value_printer<char_t, char_traits_t, const
xtd::
char32*> {
275 static void print(std::basic_ostream<char_t, char_traits_t>& os,
const xtd::char32*
const & value) {
277 for (
size_t index = 0; value[index] != L
'\0'; index++)
278 __tunit_value_printer<char_t, char_traits_t, xtd::char32>::print(os, value[index]);
282 static void print(std::basic_ostream<char_t, char_traits_t>& os,
const xtd::char32*& value) {
284 for (
size_t index = 0; value[index] != L
'\0'; index++)
285 __tunit_value_printer<char_t, char_traits_t, xtd::char32>::print(os, value[index]);
289 static void print(std::basic_ostream<char_t, char_traits_t>& os,
xtd::char32 value) {
291 os << static_cast<char>(value);
293 os <<
"\\x" << std::hex << static_cast<int>(value);
297template<
class char_t,
class char_traits_t>
298struct __tunit_value_printer<char_t, char_traits_t,
xtd::
char32> {
299 static void print(std::basic_ostream<char_t, char_traits_t>& os,
const xtd::char32*
const & value) {
301 for (
size_t index = 0; value[index] != L
'\0'; index++)
302 __tunit_value_printer<char_t, char_traits_t, xtd::char32>::print(os, value[index]);
306 static void print(std::basic_ostream<char_t, char_traits_t>& os,
const xtd::char32*& value) {
308 for (
size_t index = 0; value[index] != L
'\0'; index++)
309 __tunit_value_printer<char_t, char_traits_t, xtd::char32>::print(os, value[index]);
313 static void print(std::basic_ostream<char_t, char_traits_t>& os,
xtd::char32 value) {
315 os << static_cast<char>(value);
317 os <<
"\\x" << std::hex << static_cast<int>(value);
321template<
class char_t,
class char_traits_t>
322struct __tunit_value_printer<char_t, char_traits_t, const wchar_t*> {
323 static void print(std::basic_ostream<char_t, char_traits_t>& os,
const wchar_t*
const & value) {
325 for (
size_t index = 0; value[index] != L
'\0'; index++)
326 __tunit_value_printer<char_t, char_traits_t, wchar_t>::print(os, value[index]);
330 static void print(std::basic_ostream<char_t, char_traits_t>& os,
const wchar_t*& value) {
332 for (
size_t index = 0; value[index] != L
'\0'; index++)
333 __tunit_value_printer<char_t, char_traits_t, wchar_t>::print(os, value[index]);
337 static void print(std::basic_ostream<char_t, char_traits_t>& os,
wchar_t value) {
339 os << static_cast<char>(value);
341 os <<
"\\x" << std::hex << static_cast<int>(value);
345template<
class char_t,
class char_traits_t>
346struct __tunit_value_printer<char_t, char_traits_t, wchar_t> {
347 static void print(std::basic_ostream<char_t, char_traits_t>& os,
const wchar_t*
const & value) {
349 for (
size_t index = 0; value[index] != L
'\0'; index++)
350 __tunit_value_printer<char_t, char_traits_t, wchar_t>::print(os, value[index]);
354 static void print(std::basic_ostream<char_t, char_traits_t>& os,
const wchar_t*& value) {
356 for (
size_t index = 0; value[index] != L
'\0'; index++)
357 __tunit_value_printer<char_t, char_traits_t, wchar_t>::print(os, value[index]);
361 static void print(std::basic_ostream<char_t, char_traits_t>& os,
wchar_t value) {
363 os << static_cast<char>(value);
365 os <<
"\\x" << std::hex << static_cast<int>(value);
369template<
class char_t,
class char_traits_t,
class type1_t,
class type2_t>
370struct __tunit_value_printer<char_t, char_traits_t, std::pair<type1_t, type2_t>> {
371 static void print(std::basic_ostream<char_t, char_traits_t>& os,
const std::pair<type1_t, type2_t>& value) {
373 __tunit_value_printer<char_t, char_traits_t, type1_t>::print(os, value.first);
375 __tunit_value_printer<char_t, char_traits_t, type2_t>::print(os, value.second);
380template<
class char_t,
class char_traits_t,
class type_t,
unsigned N,
unsigned Last>
381struct __tuple_printer {
382 static void print(std::basic_ostream < char_t, char_traits_t >& os,
const type_t& value) {
383 __tunit_value_printer < char_t, char_traits_t, typename std::tuple_element < N, type_t>::type>::print(os, std::get < N > (value));
385 __tuple_printer < char_t, char_traits_t, type_t, N + 1, Last >::print(os, value);
389template <
class char_t,
class char_traits_t,
class type_t,
unsigned N >
390struct __tuple_printer < char_t, char_traits_t, type_t, N, N > {
391 static void print(std::basic_ostream < char_t, char_traits_t >& os,
const type_t& value) {
392 __tunit_value_printer < char_t, char_traits_t, typename std::tuple_element < N, type_t>::type>::print(os, std::get < N > (value));
396template <
class char_t,
class char_traits_t,
class ...types_t >
397struct __tunit_value_printer < char_t, char_traits_t, std::tuple < types_t ...>> {
398 static void print(std::basic_ostream < char_t, char_traits_t >& os,
const std::tuple < types_t ... >& value) {
400 __tuple_printer < char_t, char_traits_t, std::tuple < types_t ...>, 0,
sizeof...(types_t) - 1 >::print(os, value);
405template <
class char_t,
class char_traits_t >
406struct __tunit_value_printer < char_t, char_traits_t, std::tuple < >> {
407 static void print(std::basic_ostream < char_t, char_traits_t >& os,
const std::tuple < >&) {
412template <
class char_t,
class char_traits_t,
class iterator_t >
413std::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) {
416 for (iterator_t it = begin; it !=
end; ++it) {
417 if (!first) os <<
", ";
418 __tunit_value_printer < char_t, char_traits_t, typename std::iterator_traits < iterator_t>::value_type >::print(os, *it);
424template <
class char_t,
class char_traits_t,
class value_t,
size_t Size >
425struct __tunit_value_printer < char_t, char_traits_t, std::array < value_t, Size>> {
426 static void print(std::basic_ostream < char_t, char_traits_t >& os,
const std::array < value_t, Size >& values) {
427 __print_sequence_container(os, values.begin(), values.end());
431template <
class char_t,
class char_traits_t,
class value_t >
432struct __tunit_value_printer < char_t, char_traits_t, std::deque < value_t>> {
433 static void print(std::basic_ostream < char_t, char_traits_t >& os,
const std::deque < value_t >& values) {
434 __print_sequence_container(os, values.begin(), values.end());
438template <
class char_t,
class char_traits_t,
class value_t >
439struct __tunit_value_printer < char_t, char_traits_t, std::forward_list < value_t>> {
440 static void print(std::basic_ostream < char_t, char_traits_t >& os,
const std::forward_list < value_t >& values) {
441 __print_sequence_container(os, values.begin(), values.end());
445template <
class char_t,
class char_traits_t,
class value_t >
446struct __tunit_value_printer < char_t, char_traits_t, std::list < value_t>> {
447 static void print(std::basic_ostream < char_t, char_traits_t >& os,
const std::list < value_t >& values) {
448 __print_sequence_container(os, values.begin(), values.end());
452template <
class char_t,
class char_traits_t,
class value_t >
453struct __tunit_value_printer < char_t, char_traits_t, std::initializer_list < value_t>> {
454 static void print(std::basic_ostream < char_t, char_traits_t >& os,
const std::initializer_list < value_t >& values) {
455 __print_sequence_container(os, values.begin(), values.end());
459template <
class char_t,
class char_traits_t,
class value_t >
460struct __tunit_value_printer < char_t, char_traits_t, std::vector < value_t>> {
461 static void print(std::basic_ostream < char_t, char_traits_t >& os,
const std::vector < value_t >& values) {
462 __print_sequence_container(os, values.begin(), values.end());
466template <
class char_t,
class char_traits_t,
class iterator_t >
467std::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) {
470 for (iterator_t it = begin; it !=
end; ++it) {
471 if (!first) os <<
", ";
472 __tunit_value_printer < char_t, char_traits_t, typename std::iterator_traits < iterator_t>::value_type >::print(os, *it);
478template <
class char_t,
class char_traits_t,
class key_t,
class value_t >
479struct __tunit_value_printer < char_t, char_traits_t, std::map < key_t, value_t>> {
480 static void print(std::basic_ostream < char_t, char_traits_t >& os,
const std::map < key_t, value_t >& values) {
481 __print_associative_container(os, values.begin(), values.end());
485template <
class char_t,
class char_traits_t,
class key_t,
class value_t >
486struct __tunit_value_printer < char_t, char_traits_t, std::multimap < key_t, value_t>> {
487 static void print(std::basic_ostream < char_t, char_traits_t >& os,
const std::multimap < key_t, value_t >& values) {
488 __print_associative_container(os, values.begin(), values.end());
492template <
class char_t,
class char_traits_t,
class value_t >
493struct __tunit_value_printer < char_t, char_traits_t, std::multiset < value_t>> {
494 static void print(std::basic_ostream < char_t, char_traits_t >& os,
const std::multiset < value_t >& values) {
495 __print_associative_container(os, values.begin(), values.end());
499template <
class char_t,
class char_traits_t,
class value_t >
500struct __tunit_value_printer < char_t, char_traits_t, std::set < value_t>> {
501 static void print(std::basic_ostream < char_t, char_traits_t >& os,
const std::set < value_t >& values) {
502 __print_associative_container(os, values.begin(), values.end());
506template <
class char_t,
class char_traits_t,
class key_t,
class value_t >
507struct __tunit_value_printer < char_t, char_traits_t, std::unordered_map < key_t, value_t>> {
508 static void print(std::basic_ostream < char_t, char_traits_t >& os,
const std::unordered_map < key_t, value_t >& values) {
509 __print_associative_container(os, values.begin(), values.end());
513template <
class char_t,
class char_traits_t,
class key_t,
class value_t >
514struct __tunit_value_printer < char_t, char_traits_t, std::unordered_multimap < key_t, value_t>> {
515 static void print(std::basic_ostream < char_t, char_traits_t >& os,
const std::unordered_multimap < key_t, value_t >& values) {
516 __print_associative_container(os, values.begin(), values.end());
520template <
class char_t,
class char_traits_t,
class value_t >
521struct __tunit_value_printer < char_t, char_traits_t, std::unordered_multiset < value_t>> {
522 static void print(std::basic_ostream < char_t, char_traits_t >& os,
const std::unordered_multiset < value_t >& values) {
523 __print_associative_container(os, values.begin(), values.end());
527template <
class char_t,
class char_traits_t,
class value_t >
528struct __tunit_value_printer < char_t, char_traits_t, std::unordered_set < value_t>> {
529 static void print(std::basic_ostream < char_t, char_traits_t >& os,
const std::unordered_set < value_t >& values) {
530 __print_associative_container(os, values.begin(), values.end());
534#if __XTD_CURRENT_TARGET_ID__ == __XTD_TARGET_ID_TEST_APPLICATION__
535template <
class char_t,
class char_traits_t,
class type_t >
536std::basic_ostream < char_t, char_traits_t >& operator <<(std::basic_ostream < char_t, char_traits_t >& os,
const type_t& value) {
537 __tunit_value_printer < char_t, char_traits_t, type_t >::print(os, value);
541template <
class char_t,
class char_traits_t,
class type_t >
542std::basic_ostream < char_t, char_traits_t >& operator <<(std::basic_ostream < char_t, char_traits_t >& os,
const type_t* value) {
543 __tunit_value_printer < char_t, char_traits_t, type_t >::print(os, value);
547template <
class char_t,
class char_traits_t,
class type_t >
548std::basic_ostream < char_t, char_traits_t >& operator <<(std::basic_ostream < char_t, char_traits_t >& os, type_t* value) {
549 __tunit_value_printer < char_t, char_traits_t, type_t >::print(os, value);
554inline std::string __tunit_codepoint_to_string(
xtd::char32 codepoint) {
556 if (codepoint < 0x80)
557 result.push_back(
static_cast < char > (codepoint));
558 else if (codepoint < 0x800) {
559 result.push_back(
static_cast < char > ((codepoint >> 6) | 0xc0));
560 result.push_back(
static_cast < char > ((codepoint & 0x3f) | 0x80));
561 }
else if (codepoint < 0x10000) {
562 result.push_back(
static_cast < char > ((codepoint >> 12) | 0xe0));
563 result.push_back(
static_cast < char > (((codepoint >> 6) & 0x3f) | 0x80));
564 result.push_back(
static_cast < char > ((codepoint & 0x3f) | 0x80));
566 result.push_back(
static_cast < char > ((codepoint >> 18) | 0xf0));
567 result.push_back(
static_cast < char > (((codepoint >> 12) & 0x3f) | 0x80));
568 result.push_back(
static_cast < char > (((codepoint >> 6) & 0x3f) | 0x80));
569 result.push_back(
static_cast < char > ((codepoint & 0x3f) | 0x80));
575 std::stringstream ss;
581 std::stringstream ss;
587 std::stringstream ss;
592inline xtd::string __tunit_to_string(
const wchar_t& value) {
593 std::stringstream ss;
598inline xtd::string __tunit_to_string(
const std::string& value) {
599 std::stringstream ss;
605 std::stringstream ss;
606 ss << value.quoted().
chars();
610inline xtd::string __tunit_to_string(
const std::u8string& value) {
611 std::stringstream ss;
616inline xtd::string __tunit_to_string(
const std::u16string& value) {
619 for (
auto codepoint : value)
620 result += __tunit_codepoint_to_string(codepoint);
625inline xtd::string __tunit_to_string(
const std::u32string& value) {
628 for (
auto codepoint : value)
629 result += __tunit_codepoint_to_string(codepoint);
634inline xtd::string __tunit_to_string(
const std::wstring& value) {
637 for (
auto codepoint : value)
638 result += __tunit_codepoint_to_string(codepoint);
643inline xtd::string __tunit_to_string(
const void* value) {
644 std::stringstream ss;
645 ss <<
"\"" <<
reinterpret_cast < xtd::intptr > (value) <<
"\"";
650 std::stringstream ss;
651 ss <<
"\"" <<
reinterpret_cast < xtd::intptr > (value) <<
"\"";
655inline xtd::string __tunit_to_string(
const char* value) {
656 std::stringstream ss;
662 return __tunit_to_string(std::u8string(value));
666 return __tunit_to_string(std::u16string(value));
670 return __tunit_to_string(std::u32string(value));
673inline xtd::string __tunit_to_string(
const wchar_t* value) {
674 return __tunit_to_string(std::wstring(value));
677template <
class value_t >
678inline xtd::string __tunit_to_string(
const value_t& value) {
679 std::stringstream ss;
684template <
class value_t >
685inline xtd::string __tunit_to_string(
const value_t* value) {
686 std::stringstream ss;
687 ss << reinterpret_cast < xtd::intptr > (value);
691template <
class value_t >
692inline xtd::string __tunit_to_string(value_t* value) {
693 std::stringstream ss;
694 ss << reinterpret_cast < xtd::intptr > (value);
const base_type & chars() const noexcept
Returns a reference to the underlying base type.
Definition basic_string.hpp:354
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
constexpr bool is_stream_insertable_v
Convenience variable template equivalent to is_stream_insertable_v<value_t>::value.
Definition is_stream_insertable.hpp:100
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