xtd 0.2.0
Loading...
Searching...
No Matches
to_string.h
Go to the documentation of this file.
1
4#pragma once
6#define __XTD_CORE_INTERNAL__
18#undef __XTD_CORE_INTERNAL__
19#define __XTD_STD_INTERNAL__
21#undef __XTD_STD_INTERNAL__
25#include "types.h"
26#include <string>
27
29namespace xtd {
40 template<typename value_t>
41 inline std::string to_string(const value_t& value, const std::string& fmt, const std::locale& loc) {return __to_string_polymorphic(value, fmt, loc, std::is_polymorphic<value_t>());}
42
53 template<>
54 inline std::string to_string(const bool& value, const std::string& fmt, const std::locale& loc) {return __boolean_formatter(fmt, value, loc);}
55
66 template<>
67 inline std::string to_string(const sbyte& value, const std::string& fmt, const std::locale& loc) {return __numeric_formatter(fmt, value, loc);}
68
79 template<>
80 inline std::string to_string(const char& value, const std::string& fmt, const std::locale& loc) {return __character_formatter(fmt, value, loc);}
81
92 template<>
93 inline std::string to_string(const unsigned char& value, const std::string& fmt, const std::locale& loc) {return __numeric_formatter(fmt, value, loc);}
94
105 template<>
106 inline std::string to_string(const short& value, const std::string& fmt, const std::locale& loc) {return __numeric_formatter(fmt, value, loc);}
107
118 template<>
119 inline std::string to_string(const unsigned short& value, const std::string& fmt, const std::locale& loc) {return __numeric_formatter(fmt, value, loc);}
120
131 template<>
132 inline std::string to_string(const int& value, const std::string& fmt, const std::locale& loc) {return __numeric_formatter(fmt, value, loc);}
133
144 template<>
145 inline std::string to_string(const unsigned int& value, const std::string& fmt, const std::locale& loc) {return __numeric_formatter(fmt, value, loc);}
146
157 template<>
158 inline std::string to_string(const long& value, const std::string& fmt, const std::locale& loc) {return __numeric_formatter(fmt, value, loc);}
159
170 template<>
171 inline std::string to_string(const unsigned long& value, const std::string& fmt, const std::locale& loc) {return __numeric_formatter(fmt, value, loc);}
172
183 template<>
184 inline std::string to_string(const long long& value, const std::string& fmt, const std::locale& loc) {return __numeric_formatter(fmt, value, loc);}
185
196 template<>
197 inline std::string to_string(const unsigned long long& value, const std::string& fmt, const std::locale& loc) {return __numeric_formatter(fmt, value, loc);}
198
209 template<>
210 inline std::string to_string(const float& value, const std::string& fmt, const std::locale& loc) {return __floating_point_formatter(fmt, value, loc);}
211
222 template<>
223 inline std::string to_string(const double& value, const std::string& fmt, const std::locale& loc) {return __floating_point_formatter(fmt, value, loc);}
224
235 template<>
236 inline std::string to_string(const long double& value, const std::string& fmt, const std::locale& loc) {return __floating_point_formatter(fmt, value, loc);}
237
248 template<>
249 inline std::string to_string(const std::chrono::system_clock::time_point& value, const std::string& fmt, const std::locale& loc) {return __date_time_formatter(fmt, std::chrono::system_clock::to_time_t(value), std::chrono::duration_cast<std::chrono::nanoseconds>(value.time_since_epoch()).count() % 1000000000, loc);}
250
261 template<>
262 inline std::string to_string(const std::tm& value, const std::string& fmt, const std::locale& loc) {return __date_time_formatter(fmt, value, 0, loc);}
263
274 template<typename type_t, typename Period>
275 inline std::string to_string(const std::chrono::duration<type_t, Period>& value, const std::string& fmt, const std::locale& loc) {return __duration_formatter(fmt, value, loc);}
276
277#if defined(__xtd__cpp_lib_char8_t)
288 template<>
289 inline std::string to_string(const char8& value, const std::string& fmt, const std::locale& loc) {return __character_formatter(fmt, value, loc);}
290#endif
291
302 template<>
303 inline std::string to_string(const char16& value, const std::string& fmt, const std::locale& loc) {return __character_formatter(fmt, value, loc);}
304
315 template<>
316 inline std::string to_string(const char32& value, const std::string& fmt, const std::locale& loc) {return __character_formatter(fmt, value, loc);}
317
328 template<>
329 inline std::string to_string(const wchar& value, const std::string& fmt, const std::locale& loc) {return __character_formatter(fmt, value, loc);}
330
332 std::string to_string(const char* value, const std::string& fmt, const std::locale& loc);
333#if defined(__xtd__cpp_lib_char8_t)
334 std::string to_string(const char8* value, const std::string& fmt, const std::locale& loc);
335#endif
336 std::string to_string(const char16* value, const std::string& fmt, const std::locale& loc);
337 std::string to_string(const char32* value, const std::string& fmt, const std::locale& loc);
338 std::string to_string(const wchar* value, const std::string& fmt, const std::locale& loc);
339 std::string to_string(const std::string& value, const std::string& fmt, const std::locale& loc);
340 std::string to_string(const xtd::string& value, const std::string& fmt, const std::locale& loc);
341#if defined(__xtd__cpp_lib_char8_t)
342 std::string to_string(const std::u8string& value, const std::string& fmt, const std::locale& loc);
343#endif
344 std::string to_string(const std::u16string& value, const std::string& fmt, const std::locale& loc);
345 std::string to_string(const std::u32string& value, const std::string& fmt, const std::locale& loc);
346 std::string to_string(const std::wstring& value, const std::string& fmt, const std::locale& loc);
348
358 template<typename value_t>
359 inline std::string to_string(const value_t& value, const std::string& fmt) {return to_string(value, fmt, std::locale());}
360
362 inline std::string to_string(const char* value, const std::string& fmt) {return to_string(value, fmt, std::locale());}
364
365#if defined(__xtd__cpp_lib_three_way_comparison)
366 template<>
367 inline std::string to_string(const std::partial_ordering& value, const std::string& fmt, const std::locale& loc) {
368 if (value == std::partial_ordering::less) return "less";
369 if (value == std::partial_ordering::greater) return "greater";
370 return "equivalent";
371 }
372
373 template<>
374 inline std::string to_string(const std::strong_ordering& value, const std::string& fmt, const std::locale& loc) {
375 if (value == std::strong_ordering::less) return "less";
376 if (value == std::strong_ordering::greater) return "greater";
377 return "equivalent";
378 }
379
380 template<>
381 inline std::string to_string(const std::weak_ordering& value, const std::string& fmt, const std::locale& loc) {
382 if (value == std::weak_ordering::less) return "less";
383 if (value == std::weak_ordering::greater) return "greater";
384 return "equivalent";
385 }
386#endif
387
388 template<typename value_t>
389 inline std::string to_string(const value_t* value, const std::string& fmt, const std::locale& loc) {
390 if (!value) return "(null)";
391 return __numeric_formatter(fmt, reinterpret_cast<intptr>(value), loc);
392 }
393
394 template<typename value_t>
395 inline std::string to_string(value_t* const value, const std::string& fmt, const std::locale& loc) {
396 if (!value) return "(null)";
397 return __numeric_formatter(fmt, reinterpret_cast<intptr>(value), loc);
398 }
399
400 template<typename type_t>
401 inline std::string to_string(const std::shared_ptr<type_t>& value, const std::string& fmt, const std::locale& loc) {
402 if (!value) return "(null)";
403 return __numeric_formatter(fmt, reinterpret_cast<intptr>(value.get()), loc);
404 }
405
406 template<typename type_t>
407 inline std::string to_string(const std::unique_ptr<type_t>& value, const std::string& fmt, const std::locale& loc) {
408 if (!value) return "(null)";
409 return __numeric_formatter(fmt, reinterpret_cast<intptr>(value.get()), loc);
410 }
411
412 template<>
413 inline std::string to_string(const std::any& value, const std::string& fmt, const std::locale& loc) {
414 auto iterator = __any_stringer__.find(std::type_index(value.type()));
415 return iterator != __any_stringer__.cend() ? xtd::to_string(iterator->second(value), fmt, loc) : "(unregistered)";
416 }
417
418 template<typename type_t>
419 inline std::string to_string(const std::optional<type_t>& value, const std::string& fmt, const std::locale& loc) {return !value.has_value() ? "(null)" : std::string {"("} + to_string(value.value(), fmt, loc) + std::string {")"};}
420
421 template<>
422 inline std::string to_string(const std::nullopt_t& value, const std::string& fmt, const std::locale& loc) {return "(null)";}
423
424 template<typename type1_t, typename type2_t>
425 inline std::string to_string(const std::pair<type1_t, type2_t>& value, const std::string& fmt, const std::locale& loc) {
426 return std::string {"("} + to_string(value.first, fmt, loc) + std::string {", "} + to_string(value.second, fmt, loc) + std::string {")"};
427 }
428
429 template<typename type_t, unsigned n_t, unsigned last_t>
431 static std::string to_string(const std::string& str, const type_t& value, const std::string& fmt, const std::locale& loc) {return __xtd_tuple_stringer<type_t, n_t + 1, last_t >::to_string(str + xtd::to_string(std::get<n_t>(value), fmt, loc) + ", ", value, fmt, loc);}
432 };
433
434 template<typename type_t, unsigned n_t>
435 struct __xtd_tuple_stringer<type_t, n_t, n_t> {
436 static std::string to_string(const std::string& str, const type_t& value, const std::string& fmt, const std::locale& loc) {return str + xtd::to_string(std::get<n_t>(value), fmt, loc);}
437 };
438
439 template<typename ... types_t>
440 inline std::string to_string(const std::tuple<types_t ...>& value, const std::string& fmt, const std::locale& loc) {return __xtd_tuple_stringer<std::tuple<types_t ...>, 0, sizeof...(types_t) - 1 >::to_string(std::string {"("}, value, fmt, loc) + ")";}
441
442 template<typename iterator_t>
443 inline std::string __xtd_iterator_to_string(const std::string& str, iterator_t iterator, const iterator_t& begin, const iterator_t& end, const std::string& fmt, const std::locale& loc) {
444 if (iterator == end) return str;
445 auto new_str = str + (iterator == begin ? std::string {} : std::string {", "}) + xtd::to_string(*iterator, fmt, loc);
446 return __xtd_iterator_to_string(new_str, ++iterator, begin, end, fmt, loc);
447 }
448
449 template<typename iterator_t>
450 inline std::string __xtd_sequence_container_to_string(const iterator_t& begin, const iterator_t& end, const std::string& fmt, const std::locale& loc) {return __xtd_iterator_to_string("[", begin, begin, end, fmt, loc) + "]";}
451
452 template<typename type_t, size_t size>
453 inline std::string to_string(const std::array<type_t, size>& values, const std::string& fmt, const std::locale& loc) {return __xtd_sequence_container_to_string(values.begin(), values.end(), fmt, loc);}
454
455 template<typename type_t, typename allocator_t>
456 inline std::string to_string(const std::deque<type_t, allocator_t>& values, const std::string& fmt, const std::locale& loc) {return __xtd_sequence_container_to_string(values.begin(), values.end(), fmt, loc);}
457
458 template<typename type_t, typename allocator_t>
459 inline std::string to_string(const std::forward_list<type_t, allocator_t>& values, const std::string& fmt, const std::locale& loc) {return __xtd_sequence_container_to_string(values.begin(), values.end(), fmt, loc);}
460
461 template<typename type_t>
462 inline std::string to_string(const std::initializer_list<type_t>& values, const std::string& fmt, const std::locale& loc) {return __xtd_sequence_container_to_string(values.begin(), values.end(), fmt, loc);}
463
464 template<typename type_t, typename allocator_t>
465 inline std::string to_string(const std::list<type_t, allocator_t>& values, const std::string& fmt, const std::locale& loc) {return __xtd_sequence_container_to_string(values.begin(), values.end(), fmt, loc);}
466
467 template<typename type_t>
468 inline std::string to_string(const std::valarray<type_t>& values, const std::string& fmt, const std::locale& loc) {return __xtd_sequence_container_to_string(std::begin(values), std::end(values), fmt, loc);}
469
470 template<typename type_t, typename allocator_t>
471 inline std::string to_string(const std::vector<type_t, allocator_t>& values, const std::string& fmt, const std::locale& loc) {return __xtd_sequence_container_to_string(values.begin(), values.end(), fmt, loc);}
472
473 template<typename iterator_t>
474 inline std::string __xtd_associative_container_to_string(const iterator_t& begin, const iterator_t& end, const std::string& fmt, const std::locale& loc) {return __xtd_iterator_to_string("{", begin, begin, end, fmt, loc) + "}";}
475
476 template<typename key_t, typename value_t, typename compare_t, typename allocator_t>
477 inline std::string to_string(const std::map<key_t, value_t, compare_t, allocator_t>& values, const std::string& fmt, const std::locale& loc) {return __xtd_associative_container_to_string(values.begin(), values.end(), fmt, loc);}
478
479 template<typename key_t, typename value_t, typename compare_t, typename allocator_t>
480 inline std::string to_string(const std::multimap<key_t, value_t, compare_t, allocator_t>& values, const std::string& fmt, const std::locale& loc) {return __xtd_associative_container_to_string(values.begin(), values.end(), fmt, loc);}
481
482 template<typename key_t, typename compare_t, typename allocator_t>
483 inline std::string to_string(const std::multiset<key_t, compare_t, allocator_t>& values, const std::string& fmt, const std::locale& loc) {return __xtd_associative_container_to_string(values.begin(), values.end(), fmt, loc);}
484
485 template<typename key_t, typename compare_t, typename allocator_t>
486 inline std::string to_string(const std::set<key_t, compare_t, allocator_t>& values, const std::string& fmt, const std::locale& loc) {return __xtd_associative_container_to_string(values.begin(), values.end(), fmt, loc);}
487
488 template<typename key_t, typename value_t, typename compare_t, typename allocator_t>
489 inline std::string to_string(const std::unordered_map<key_t, value_t, compare_t, allocator_t>& values, const std::string& fmt, const std::locale& loc) {return __xtd_associative_container_to_string(values.begin(), values.end(), fmt, loc);}
490
491 template<typename key_t, typename value_t, typename compare_t, typename allocator_t>
492 inline std::string to_string(const std::unordered_multimap<key_t, value_t, compare_t, allocator_t>& values, const std::string& fmt, const std::locale& loc) {return __xtd_associative_container_to_string(values.begin(), values.end(), fmt, loc);}
493
494 template<typename key_t, typename compare_t, typename allocator_t>
495 inline std::string to_string(const std::unordered_multiset<key_t, compare_t, allocator_t>& values, const std::string& fmt, const std::locale& loc) {return __xtd_associative_container_to_string(values.begin(), values.end(), fmt, loc);}
496
497 template<typename key_t, typename compare_t, typename allocator_t>
498 inline std::string to_string(const std::unordered_set<key_t, compare_t, allocator_t>& values, const std::string& fmt, const std::locale& loc) {return __xtd_associative_container_to_string(values.begin(), values.end(), fmt, loc);}
499
510 template<typename value_t>
511 inline std::wstring to_string(const value_t& value, const std::wstring& fmt, const std::locale& loc) {return __to_string_polymorphic(value, fmt, loc, std::is_polymorphic<value_t>());}
512
523 template<>
524 inline std::wstring to_string(const bool& value, const std::wstring& fmt, const std::locale& loc) {return __boolean_formatter(fmt, value, loc);}
525
536 template<>
537 inline std::wstring to_string(const sbyte& value, const std::wstring& fmt, const std::locale& loc) {return __numeric_formatter(fmt, value, loc);}
538
549 template<>
550 inline std::wstring to_string(const char& value, const std::wstring& fmt, const std::locale& loc) {return __numeric_formatter(fmt, value, loc);}
551
562 template<>
563 inline std::wstring to_string(const unsigned char& value, const std::wstring& fmt, const std::locale& loc) {return __numeric_formatter(fmt, value, loc);}
564
575 template<>
576 inline std::wstring to_string(const short& value, const std::wstring& fmt, const std::locale& loc) {return __numeric_formatter(fmt, value, loc);}
577
588 template<>
589 inline std::wstring to_string(const unsigned short& value, const std::wstring& fmt, const std::locale& loc) {return __numeric_formatter(fmt, value, loc);}
590
601 template<>
602 inline std::wstring to_string(const int& value, const std::wstring& fmt, const std::locale& loc) {return __numeric_formatter(fmt, value, loc);}
603
614 template<>
615 inline std::wstring to_string(const unsigned int& value, const std::wstring& fmt, const std::locale& loc) {return __numeric_formatter(fmt, value, loc);}
616
627 template<>
628 inline std::wstring to_string(const long& value, const std::wstring& fmt, const std::locale& loc) {return __numeric_formatter(fmt, value, loc);}
629
640 template<>
641 inline std::wstring to_string(const unsigned long& value, const std::wstring& fmt, const std::locale& loc) {return __numeric_formatter(fmt, value, loc);}
642
653 template<>
654 inline std::wstring to_string(const long long& value, const std::wstring& fmt, const std::locale& loc) {return __numeric_formatter(fmt, value, loc);}
655
666 template<>
667 inline std::wstring to_string(const unsigned long long& value, const std::wstring& fmt, const std::locale& loc) {return __numeric_formatter(fmt, value, loc);}
668
679 template<>
680 inline std::wstring to_string(const float& value, const std::wstring& fmt, const std::locale& loc) {return __floating_point_formatter(fmt, value, loc);}
681
692 template<>
693 inline std::wstring to_string(const double& value, const std::wstring& fmt, const std::locale& loc) {return __floating_point_formatter(fmt, value, loc);}
694
705 template<>
706 inline std::wstring to_string(const long double& value, const std::wstring& fmt, const std::locale& loc) {return __floating_point_formatter(fmt, value, loc);}
707
718 template<>
719 inline std::wstring to_string(const std::chrono::system_clock::time_point& value, const std::wstring& fmt, const std::locale& loc) {return __date_time_formatter(fmt, std::chrono::system_clock::to_time_t(value), std::chrono::duration_cast<std::chrono::milliseconds>(value.time_since_epoch()).count() % 1000000000, loc);}
720
731 template<>
732 inline std::wstring to_string(const std::tm& value, const std::wstring& fmt, const std::locale& loc) {return __date_time_formatter(fmt, value, 0, loc);}
733
744 template<typename type_t, typename Period>
745 inline std::wstring to_string(const std::chrono::duration<type_t, Period>& value, const std::wstring& fmt, const std::locale& loc) {return __duration_formatter(fmt, value, loc);}
746
748 template<typename char_t, typename value_t>
749 inline std::basic_string<char_t> __string_formatter(const std::basic_string<char_t>& fmt, value_t value, const std::locale& loc) {
750 return __format_stringer<char_t>(value);
751 }
753
764 template<>
765 inline std::wstring to_string(const std::wstring& value, const std::wstring& fmt, const std::locale& loc) {return __string_formatter(fmt, value, loc);}
766
767#if defined(__xtd__cpp_lib_char8_t)
778 template<>
779 inline std::wstring to_string(const char8& value, const std::wstring& fmt, const std::locale& loc) {return __character_formatter(fmt, value, loc);}
780#endif
781
792 template<>
793 inline std::wstring to_string(const char16& value, const std::wstring& fmt, const std::locale& loc) {return __character_formatter(fmt, value, loc);}
794
805 template<>
806 inline std::wstring to_string(const char32& value, const std::wstring& fmt, const std::locale& loc) {return __character_formatter(fmt, value, loc);}
807
818 template<>
819 inline std::wstring to_string(const wchar& value, const std::wstring& fmt, const std::locale& loc) {return __character_formatter(fmt, value, loc);}
820
822 inline std::wstring to_string(const wchar* value, const std::wstring& fmt, const std::locale& loc) {return __string_formatter(fmt, value, loc);}
824
834 template<typename value_t>
835 inline std::wstring to_string(const value_t& value, const std::wstring& fmt) {return to_string(value, fmt, std::locale());}
836
838 inline std::wstring to_string(const wchar* value, const std::wstring& fmt) {return to_string(value, fmt, std::locale());}
840}
841
Contains __binary_formatter method.
Contains __boolean_formatter method.
Contains __character_formatter method.
Contains __currency_formatter method.
Contains __date_time_formatter method.
Contains __duration_formatter method.
Contains __floating_point_formatter method.
Contains __format_stringer methods.
Contains __iformatable_formatter method.
Contains __natural_formatter method.
Contains __numeric_formatter method.
Contains __xtd_std_version definitions.
Represents text as a sequence of character units.
Definition basic_string.h:79
Contains generic stream output methods.
char8_t char8
Represents a 8-bit unicode character.
Definition char8.h:27
wchar_t wchar
Represents a wide character.
Definition wchar.h:24
int8_t sbyte
Represents a 8-bit signed integer.
Definition sbyte.h:23
char16_t char16
Represents a 16-bit unicode character.
Definition char16.h:26
char32_t char32
Represents a 32-bit unicode character.
Definition char32.h:26
intmax_t intptr
Represent a pointer or a handle.
Definition intptr.h:23
std::string to_string(const value_t &value, const std::string &fmt, const std::locale &loc)
Convert a specified value into a string with specified format and locale.
Definition to_string.h:41
@ end
The END key.
The xtd namespace contains all fundamental classes to access Hardware, Os, System,...
Definition xtd_about_box.h:10
Contains xtd::register_any_stringer and xtd::unregister_any_stringer method.
Definition to_string.h:430
Contains xtd fundamental types.