xtd 0.2.0
__format_stringer.hpp
Go to the documentation of this file.
1
3#pragma once
4
5#define __XTD_STD_INTERNAL__
7#undef __XTD_STD_INTERNAL__
10#include "../any.hpp"
11#include "../chrono.hpp"
12#include "../optional.hpp"
13#include "../types.hpp"
14#include <algorithm>
15#include <array>
16#include <cctype>
17#include <cstddef>
18#include <cstdint>
19#include <deque>
20#include <forward_list>
21#include <functional>
22#include <iomanip>
23#include <iostream>
24#include <locale>
25#include <list>
26#include <map>
27#include <set>
28#include <sstream>
29#include <stdexcept>
30#include <string>
31#include <system_error>
32#include <tuple>
33#include <type_traits>
34#include <typeindex>
35#include <unordered_map>
36#include <unordered_set>
37#include <utility>
38#include <valarray>
39#include <vector>
40
41
43namespace xtd {
44 class iformatable;
45 class object;
46
47 template<class value_t>
48 inline std::string to_string(const value_t& value, const std::string& fmt, const std::locale& loc);
49 template<>
50 inline std::string to_string(const bool& value, const std::string& fmt, const std::locale& loc);
51 template<>
52 inline std::string to_string(const xtd::sbyte& value, const std::string& fmt, const std::locale& loc);
53 template<>
54 inline std::string to_string(const char& value, const std::string& fmt, const std::locale& loc);
55 template<>
56 inline std::string to_string(const unsigned char& value, const std::string& fmt, const std::locale& loc);
57 template<>
58 inline std::string to_string(const short& value, const std::string& fmt, const std::locale& loc);
59 template<>
60 inline std::string to_string(const unsigned short& value, const std::string& fmt, const std::locale& loc);
61 template<>
62 inline std::string to_string(const int& value, const std::string& fmt, const std::locale& loc);
63 template<>
64 inline std::string to_string(const unsigned int& value, const std::string& fmt, const std::locale& loc);
65 template<>
66 inline std::string to_string(const long& value, const std::string& fmt, const std::locale& loc);
67 template<>
68 inline std::string to_string(const unsigned long& value, const std::string& fmt, const std::locale& loc);
69 template<>
70 inline std::string to_string(const long long& value, const std::string& fmt, const std::locale& loc);
71 template<>
72 inline std::string to_string(const unsigned long long& value, const std::string& fmt, const std::locale& loc);
73 template<>
74 inline std::string to_string(const float& value, const std::string& fmt, const std::locale& loc);
75 template<>
76 inline std::string to_string(const double& value, const std::string& fmt, const std::locale& loc);
77 template<>
78 inline std::string to_string(const long double& value, const std::string& fmt, const std::locale& loc);
79 template<>
80 inline std::string to_string(const std::chrono::system_clock::time_point& value, const std::string& fmt, const std::locale& loc);
81 template<>
82 inline std::string to_string(const std::tm& value, const std::string& fmt, const std::locale& loc);
83 template<class type_t, class period_t = std::ratio<1>>
84 inline std::string to_string(const std::chrono::duration<type_t, period_t>& value, const std::string& fmt, const std::locale& loc);
85 template<>
86 inline std::string to_string(const xtd::char8& value, const std::string& fmt, const std::locale& loc);
87 template<>
88 inline std::string to_string(const xtd::char16& value, const std::string& fmt, const std::locale& loc);
89 template<>
90 inline std::string to_string(const xtd::char32& value, const std::string& fmt, const std::locale& loc);
91 template<>
92 inline std::string to_string(const xtd::wchar& value, const std::string& fmt, const std::locale& loc);
93 template<>
94 inline std::string to_string(const std::partial_ordering& value, const std::string& fmt, const std::locale& loc);
95 template<>
96 inline std::string to_string(const std::strong_ordering& value, const std::string& fmt, const std::locale& loc);
97 template<>
98 inline std::string to_string(const std::weak_ordering& value, const std::string& fmt, const std::locale& loc);
99 template<class value_t>
100 inline std::string to_string(const value_t* value, const std::string& fmt, const std::locale& loc);
101 template<class value_t>
102 inline std::string to_string(value_t* const value, const std::string& fmt, const std::locale& loc);
103 template<class type_t>
104 inline std::string to_string(const std::shared_ptr<type_t>& value, const std::string& fmt, const std::locale& loc);
105 template<class type_t>
106 inline std::string to_string(const std::unique_ptr<type_t>& value, const std::string& fmt, const std::locale& loc);
107 template<>
108 inline std::string to_string(const xtd::any& value, const std::string& fmt, const std::locale& loc);
109 template<class type_t>
110 inline std::string to_string(const std::optional<type_t>& value, const std::string& fmt, const std::locale& loc);
111 template<>
112 inline std::string to_string(const std::nullopt_t& value, const std::string& fmt, const std::locale& loc);
113 template<class type1_t, class type2_t>
114 inline std::string to_string(const std::pair<type1_t, type2_t>& value, const std::string& fmt, const std::locale& loc);
115 template<class ...types_t>
116 inline std::string to_string(const std::tuple<types_t ...>& value, const std::string& fmt, const std::locale& loc);
117 template<class type_t, size_t size>
118 inline std::string to_string(const std::array<type_t, size>& values, const std::string& fmt, const std::locale& loc);
119 template<class type_t, class allocator_t = std::allocator<type_t>>
120 inline std::string to_string(const std::deque<type_t, allocator_t>& values, const std::string& fmt, const std::locale& loc);
121 template<class type_t, class allocator_t = std::allocator<type_t>>
122 inline std::string to_string(const std::forward_list<type_t, allocator_t>& values, const std::string& fmt, const std::locale& loc);
123 template<class type_t>
124 inline std::string to_string(const std::initializer_list<type_t>& values, const std::string& fmt, const std::locale& loc);
125 template<class type_t, class allocator_t = std::allocator<type_t>>
126 inline std::string to_string(const std::list<type_t, allocator_t>& values, const std::string& fmt, const std::locale& loc);
127 template<class type_t>
128 inline std::string to_string(const std::valarray<type_t>& values, const std::string& fmt, const std::locale& loc);
129 template<class type_t, class allocator_t = std::allocator<type_t>>
130 inline std::string to_string(const std::vector<type_t, allocator_t>& values, const std::string& fmt, const std::locale& loc);
131 template<class key_t, class value_t, class compare_t = std::less<key_t>, class allocator_t = std::allocator<std::pair<const key_t, value_t>>>
132 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);
133 template<class key_t, class value_t, class compare_t = std::less<key_t>, class allocator_t = std::allocator<std::pair<const key_t, value_t>>>
134 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);
135 template<class key_t, class compare_t = std::less<key_t>, class allocator_t = std::allocator<key_t>>
136 inline std::string to_string(const std::multiset<key_t, compare_t, allocator_t>& values, const std::string& fmt, const std::locale& loc);
137 template<class key_t, class compare_t = std::less<key_t>, class allocator_t = std::allocator<key_t>>
138 inline std::string to_string(const std::set<key_t, compare_t, allocator_t>& values, const std::string& fmt, const std::locale& loc);
139 template<class key_t, class value_t, class compare_t = std::less<key_t>, class allocator_t = std::allocator<std::pair<const key_t, value_t>>>
140 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);
141 template<class key_t, class value_t, class compare_t = std::less<key_t>, class allocator_t = std::allocator<std::pair<const key_t, value_t>>>
142 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);
143 template<class key_t, class compare_t = std::less<key_t>, class allocator_t = std::allocator<key_t>>
144 inline std::string to_string(const std::unordered_multiset<key_t, compare_t, allocator_t>& values, const std::string& fmt, const std::locale& loc);
145 template<class key_t, class compare_t = std::less<key_t>, class allocator_t = std::allocator<key_t>>
146 inline std::string to_string(const std::unordered_set<key_t, compare_t, allocator_t>& values, const std::string& fmt, const std::locale& loc);
147 template<class type_t>
148 inline std::string to_string(const xtd::collections::generic::ienumerable<type_t>& values, const std::string& fmt, const std::locale& loc);
149
150 template<class value_t>
151 inline std::wstring to_string(const value_t& value, const std::wstring& fmt, const std::locale& loc);
152 template<>
153 inline std::wstring to_string(const bool& value, const std::wstring& fmt, const std::locale& loc);
154 template<>
155 inline std::wstring to_string(const xtd::sbyte& value, const std::wstring& fmt, const std::locale& loc);
156 template<>
157 inline std::wstring to_string(const char& value, const std::wstring& fmt, const std::locale& loc);
158 template<>
159 inline std::wstring to_string(const unsigned char& value, const std::wstring& fmt, const std::locale& loc);
160 template<>
161 inline std::wstring to_string(const short& value, const std::wstring& fmt, const std::locale& loc);
162 template<>
163 inline std::wstring to_string(const unsigned short& value, const std::wstring& fmt, const std::locale& loc);
164 template<>
165 inline std::wstring to_string(const int& value, const std::wstring& fmt, const std::locale& loc);
166 template<>
167 inline std::wstring to_string(const unsigned int& value, const std::wstring& fmt, const std::locale& loc);
168 template<>
169 inline std::wstring to_string(const long& value, const std::wstring& fmt, const std::locale& loc);
170 template<>
171 inline std::wstring to_string(const unsigned long& value, const std::wstring& fmt, const std::locale& loc);
172 template<>
173 inline std::wstring to_string(const long long& value, const std::wstring& fmt, const std::locale& loc);
174 template<>
175 inline std::wstring to_string(const unsigned long long& value, const std::wstring& fmt, const std::locale& loc);
176 template<>
177 inline std::wstring to_string(const float& value, const std::wstring& fmt, const std::locale& loc);
178 template<>
179 inline std::wstring to_string(const double& value, const std::wstring& fmt, const std::locale& loc);
180 template<>
181 inline std::wstring to_string(const long double& value, const std::wstring& fmt, const std::locale& loc);
182 template<>
183 inline std::wstring to_string(const std::chrono::system_clock::time_point& value, const std::wstring& fmt, const std::locale& loc);
184 template<>
185 inline std::wstring to_string(const std::tm& value, const std::wstring& fmt, const std::locale& loc);
186
187 template<class type_t, class period_t = std::ratio<1>>
188 inline std::wstring to_string(const std::chrono::duration<type_t, period_t>& value, const std::wstring& fmt, const std::locale& loc);
189 template<>
190 inline std::wstring to_string(const xtd::char8& value, const std::wstring& fmt, const std::locale& loc);
191 template<>
192 inline std::wstring to_string(const xtd::char16& value, const std::wstring& fmt, const std::locale& loc);
193 template<>
194 inline std::wstring to_string(const xtd::char32& value, const std::wstring& fmt, const std::locale& loc);
195 template<>
196 inline std::wstring to_string(const xtd::wchar& value, const std::wstring& fmt, const std::locale& loc);
197
198 template<class type_t, class string_t>
199 inline string_t to_string(type_t value, const std::map<type_t, string_t, std::greater<type_t>>& values) {
200 auto it = values.find(value);
201 if (it != values.end()) return it->second;
202 string_t result;
203 long long rest = static_cast<long long>(value);
204 for (auto item : values) {
205 if (static_cast<long long>(item.first) != 0 && (rest & static_cast<long long>(item.first)) == static_cast<long long>(item.first)) {
206 if (!result.empty()) result = string_t {',', ' '} + result;
207 result = item.second + result;
208 rest -= static_cast<long long>(item.first);
209 }
210 }
211 if (!result.empty()) return result;
212 return to_string(static_cast<long long>(value), string_t {'G'}, std::locale());
213 }
214
215 template<class type_t, class string_t>
216 inline string_t to_string(type_t value, const std::map<type_t, string_t>& values) {
217 std::map<type_t, string_t, std::greater<type_t>> descending_values;
218 for (auto item : values) descending_values[item.first] = item.second;
219 return to_string(value, descending_values);
220 }
221
222 template<class type_t>
223 inline std::string to_string(type_t value, const std::initializer_list<std::pair<type_t, std::string>>& il) {
224 std::map<type_t, std::string, std::greater<type_t>> values;
225 for (auto item : il) values[item.first] = item.second;
226 return to_string(value, values);
227 }
228
229 template<class type_t>
230 inline std::wstring to_string(type_t value, const std::initializer_list<std::pair<type_t, std::wstring>>& il) {
231 std::map<type_t, std::wstring, std::greater<type_t>> values;
232 for (auto item : il) values[item.first] = item.second;
233 return to_string(value, values);
234 }
235}
236
237template<class char_t>
238inline std::basic_string<char_t> __codepoint_to_string(xtd::char32 codepoint) {
239 std::basic_string<char_t> result;
240 if (codepoint < 0x80)
241 result.push_back(static_cast<char_t>(codepoint));
242 else if (codepoint < 0x800) {
243 result.push_back(static_cast<char_t>((codepoint >> 6) | 0xc0));
244 result.push_back(static_cast<char_t>((codepoint & 0x3f) | 0x80));
245 } else if (codepoint < 0x10000) {
246 result.push_back(static_cast<char_t>((codepoint >> 12) | 0xe0));
247 result.push_back(static_cast<char_t>(((codepoint >> 6) & 0x3f) | 0x80));
248 result.push_back(static_cast<char_t>((codepoint & 0x3f) | 0x80));
249 } else {
250 result.push_back(static_cast<char_t>((codepoint >> 18) | 0xf0));
251 result.push_back(static_cast<char_t>(((codepoint >> 12) & 0x3f) | 0x80));
252 result.push_back(static_cast<char_t>(((codepoint >> 6) & 0x3f) | 0x80));
253 result.push_back(static_cast<char_t>((codepoint & 0x3f) | 0x80));
254 }
255 return result;
256}
257
258template<class char_t>
259inline std::basic_string<char_t> __to_string(char codepoint) {
260 return __codepoint_to_string<char_t>(codepoint);
261}
262
263template<class char_t>
264inline std::basic_string<char_t> __to_string(xtd::char32 codepoint) {
265 return __codepoint_to_string<char_t>(codepoint);
266}
267
268template<class char_t>
269inline std::basic_string<char_t> __to_string(xtd::char16 codepoint) {
270 return __codepoint_to_string<char_t>(codepoint);
271}
272
273template<class char_t>
274inline std::basic_string<char_t> __to_string(xtd::char8 codepoint) {
275 return __codepoint_to_string<char_t>(codepoint);
276}
277
278template<class char_t>
279inline std::basic_string<char_t> __to_string(xtd::wchar codepoint) {
280 return __codepoint_to_string<char_t>(codepoint);
281}
282
283template<class char_t>
284inline std::basic_string<char_t> __to_string(const std::basic_string<char_t>& str) {
285 std::basic_string<char_t> result;
286 std::for_each(str.begin(), str.end(), [&](auto codepoint) {result += __to_string<char_t>(codepoint);});
287 return result;
288}
289
290template<class char_t, class arg_t>
291inline std::basic_string<char_t> __to_string(const std::basic_string<arg_t>& str) {
292 std::basic_string<char_t> result;
293 for (auto codepoint : str)
294 result += __to_string<char_t>(codepoint);
295 return result;
296}
297
298template<class char_t, class arg_t>
299inline std::basic_string<char_t> __to_string(const arg_t* str) {
300 std::basic_string<char_t> result;
301 for (auto codepoint : std::basic_string<arg_t>(str))
302 result += __to_string<char_t>(codepoint);
303 return result;
304}
305
306template<class char_t, class type_t, class period_t = std::ratio<1>>
307std::basic_ostream<char_t>& operator <<(std::basic_ostream<char_t>& os, const std::chrono::duration<type_t, period_t>& value) {
308 return os << xtd::to_string(value, std::basic_string<char_t> {'G'}, std::locale());
309}
310
311std::ostream& operator <<(std::ostream& os, const xtd::char8* str);
312std::ostream& operator <<(std::ostream& os, const xtd::char16* str);
313std::ostream& operator <<(std::ostream& os, const xtd::char32* str);
314std::ostream& operator <<(std::ostream& os, const xtd::wchar* str);
315
316template<class enum_t>
317std::string __enum_to_string__(enum_t value) noexcept;
318std::string __iformatable_to_string(const xtd::iformatable& value) noexcept;
319std::string __object_to_string__(const xtd::object& value) noexcept;
320
321template<class char_t, class type_t, class bool_t>
322struct __enum_ostream__ {};
323
324template<class char_t, class type_t>
325struct __enum_ostream__<char_t, type_t, std::true_type> {
326 std::basic_ostream<char_t>& to_stream(std::basic_ostream<char_t>& os, const type_t& value) noexcept {
327 return os << __enum_to_string__(value);
328 }
329};
330
331template<class char_t, class type_t>
332struct __enum_ostream__<char_t, type_t, std::false_type> {
333 std::basic_ostream<char_t>& to_stream(std::basic_ostream<char_t>& os, const type_t& value) noexcept {
334 //return os << value;
335 return os << xtd::to_string(value, std::basic_string<char_t> {}, std::locale {});
336 }
337};
338
339template<class char_t, class type_t, class bool_t>
340struct __enum_or_polymorphic_ostream__ {};
341
342template<class char_t, class type_t>
343struct __enum_or_polymorphic_ostream__<char_t, type_t, std::true_type> {
344 std::basic_ostream<char_t>& to_stream(std::basic_ostream<char_t>& os, const type_t& value) noexcept {
345 if (dynamic_cast<const xtd::iformatable*>(&value)) return os << __iformatable_to_string(dynamic_cast<const xtd::iformatable&>(value));
346 if (dynamic_cast<const xtd::object*>(&value)) return os << __object_to_string__(dynamic_cast<const xtd::object&>(value));
347 return os << value;
348 }
349};
350
351template<class char_t, class type_t>
352struct __enum_or_polymorphic_ostream__<char_t, type_t, std::false_type> {
353 std::basic_ostream<char_t>& to_stream(std::basic_ostream<char_t>& os, const type_t& value) noexcept {
354 __enum_ostream__<char, type_t, typename std::is_enum<type_t>::type>().to_stream(os, value);
355 return os;
356 }
357};
358
359template<class value_t>
360std::string __format_stringer_to_std_string(const value_t& value) {
361 std::basic_stringstream<char> ss;
362 //ss << value;
363 __enum_or_polymorphic_ostream__<char, value_t, typename std::is_polymorphic<value_t>::type>().to_stream(ss, value);
364 return ss.str();
365}
366
367std::string __format_stringer_to_std_string(const char& c);
368std::string __format_stringer_to_std_string(const xtd::char8& c);
369std::string __format_stringer_to_std_string(const xtd::char16& c);
370std::string __format_stringer_to_std_string(const xtd::char32& c);
371std::string __format_stringer_to_std_string(const xtd::wchar& c);
372std::string __format_stringer_to_std_string(const char* str);
373std::string __format_stringer_to_std_string(const xtd::char8* str);
374std::string __format_stringer_to_std_string(const xtd::char16* str);
375std::string __format_stringer_to_std_string(const xtd::char32* str);
376std::string __format_stringer_to_std_string(const xtd::wchar* str);
377std::string __format_stringer_to_std_string(const std::string& str);
378std::string __format_stringer_to_std_string(const xtd::string& str);
379std::string __format_stringer_to_std_string(const std::u8string& str);
380std::string __format_stringer_to_std_string(const std::u16string& str);
381std::string __format_stringer_to_std_string(const std::u32string& str);
382std::string __format_stringer_to_std_string(const std::wstring& str);
383
384template<class char_t, class value_t>
385inline std::basic_string<char_t> __format_stringer(value_t value) {
386 std::basic_stringstream<char_t> ss;
387 ss << __format_stringer_to_std_string(value).c_str(); // Using "c_str()" is not the best method, but it is the only possibility if "char_t" is of another type than "char".
388 return ss.str();
389}
390
391template<class char_t, class value_t>
392inline std::basic_string<char_t> __format_stringer(const bool& value) {
393 std::basic_stringstream<char_t> ss;
394 ss << std::boolalpha << value;
395 return ss.str();
396}
397
398template<class char_t, class value_t, xtd::int32 len>
399inline std::basic_string<char_t> __format_stringer(const char*& value) {
400 std::basic_stringstream<char_t> ss;
401 ss << __to_string<char_t>(value);
402 return ss.str();
403}
404
405template<class char_t, class value_t, xtd::int32 len>
406inline std::basic_string<char_t> __format_stringer(const char* const& value) {
407 std::basic_stringstream<char_t> ss;
408 ss << __to_string<char_t>(value);
409 return ss.str();
410}
411
412template<class char_t, class value_t>
413inline std::basic_string<char_t> __format_stringer(const xtd::char8*& value) {
414 auto s = std::u8string(value);
415 std::basic_stringstream<char_t> ss;
416 ss << std::basic_string<char_t>(s.begin(), s.end());
417 return ss.str();
418}
419
420template<class char_t, class value_t>
421inline std::basic_string<char_t> __format_stringer(const xtd::char8* const& value) {
422 auto s = std::u8string(value);
423 std::basic_stringstream<char_t> ss;
424 ss << std::basic_string<char_t>(s.begin(), s.end());
425 return ss.str();
426}
427
428template<class char_t, class value_t>
429inline std::basic_string<char_t> __format_stringer(const xtd::char16*& value) {
430 std::basic_stringstream<char_t> ss;
431 ss << __to_string<char_t>(value);
432 return ss.str();
433}
434
435template<class char_t, class value_t>
436inline std::basic_string<char_t> __format_stringer(const xtd::char16* const& value) {
437 std::basic_stringstream<char_t> ss;
438 ss << __to_string<char_t>(value);
439 return ss.str();
440}
441
442template<class char_t, class value_t>
443inline std::basic_string<char_t> __format_stringer(const xtd::char32*& value) {
444 std::basic_stringstream<char_t> ss;
445 ss << __to_string<char_t>(value);
446 return ss.str();
447}
448
449template<class char_t, class value_t>
450inline std::basic_string<char_t> __format_stringer(const xtd::char32* const& value) {
451 std::basic_stringstream<char_t> ss;
452 ss << __to_string<char_t>(value);
453 return ss.str();
454}
455
456template<class char_t, class value_t>
457inline std::basic_string<char_t> __format_stringer(const xtd::wchar*& value) {
458 std::basic_stringstream<char_t> ss;
459 ss << __to_string<char_t>(value);
460 return ss.str();
461}
462
463template<class char_t, class value_t>
464inline std::basic_string<char_t> __format_stringer(const xtd::wchar* const& value) {
465 std::basic_stringstream<char_t> ss;
466 ss << __to_string<char_t>(value);
467 return ss.str();
468}
469
470template<>
471inline std::string __format_stringer<char, std::u8string&>(std::u8string& value) {
472 std::basic_stringstream<char> ss;
473 ss << std::string(value.begin(), value.end());
474 return ss.str();
475}
476
477template<>
478inline std::string __format_stringer<char, const std::u16string&>(const std::u16string& value) {
479 std::basic_stringstream<char> ss;
480 ss << __to_string<char>(value);
481 return ss.str();
482}
483
484template<>
485inline std::string __format_stringer<char, const std::u32string&>(const std::u32string& value) {
486 std::basic_stringstream<char> ss;
487 ss << __to_string<char>(value);
488 return ss.str();
489}
490
491template<>
492inline std::string __format_stringer<char, const std::wstring&>(const std::wstring& value) {
493 std::basic_stringstream<char> ss;
494 ss << __to_string<char>(value);
495 return ss.str();
496}
497
498template<>
499inline std::string __format_stringer<char, bool&>(bool& value) {
500 return xtd::to_string(value, "G", std::locale());
501}
502
503template<>
504inline std::string __format_stringer<char, xtd::sbyte&>(xtd::sbyte& value) {
505 return xtd::to_string(value, "G", std::locale());
506}
507
508template<>
509inline std::string __format_stringer<char, const unsigned char&>(const unsigned char& value) {
510 return xtd::to_string(value, "G", std::locale());
511}
512
513template<>
514inline std::string __format_stringer<char, unsigned char&>(unsigned char& value) {
515 return xtd::to_string(value, "G", std::locale());
516}
517
518template<>
519inline std::string __format_stringer<char, short&>(short& value) {
520 return xtd::to_string(value, "G", std::locale());
521}
522
523template<>
524inline std::string __format_stringer<char, unsigned short&>(unsigned short& value) {
525 return xtd::to_string(value, "G", std::locale());
526}
527
528template<>
529inline std::string __format_stringer<char, int&>(int& value) {
530 return xtd::to_string(value, "G", std::locale());
531}
532
533template<>
534inline std::string __format_stringer<char, unsigned int&>(unsigned int& value) {
535 return xtd::to_string(value, "G", std::locale());
536}
537
538template<>
539inline std::string __format_stringer<char, long&>(long& value) {
540 return xtd::to_string(value, "G", std::locale());
541}
542
543template<>
544inline std::string __format_stringer<char, unsigned long&>(unsigned long& value) {
545 return xtd::to_string(value, "G", std::locale());
546}
547
548template<>
549inline std::string __format_stringer<char, long long&>(long long& value) {
550 return xtd::to_string(value, "G", std::locale());
551}
552
553template<>
554inline std::string __format_stringer<char, unsigned long long&>(unsigned long long& value) {
555 return xtd::to_string(value, "G", std::locale());
556}
557
558template<>
559inline std::string __format_stringer<char, float&>(float& value) {
560 return xtd::to_string(value, "G", std::locale());
561}
562
563template<>
564inline std::string __format_stringer<char, double&>(double& value) {
565 return xtd::to_string(value, "G", std::locale());
566}
567
568template<>
569inline std::string __format_stringer<char, long double&>(long double& value) {
570 return xtd::to_string(value, "G", std::locale());
571}
572
573template<>
574inline std::string __format_stringer<char, std::chrono::system_clock::time_point&> (std::chrono::system_clock::time_point& value) {
575 return xtd::to_string(value, "G", std::locale());
576}
577
578template<>
579inline std::string __format_stringer<char, std::tm&> (tm& value) {
580 return xtd::to_string(value, "G", std::locale());
581}
582
583template<>
584inline std::string __format_stringer<char, xtd::wchar&>(xtd::wchar& value) {
585 return xtd::to_string(value, "G", std::locale());
586}
587
588template<>
589inline std::string __format_stringer<char, xtd::char8&>(xtd::char8& value) {
590 return xtd::to_string(value, "G", std::locale());
591}
592
593template<>
594inline std::string __format_stringer<char, xtd::char16&>(xtd::char16& value) {
595 return xtd::to_string(value, "G", std::locale());
596}
597
598template<>
599inline std::string __format_stringer<char, xtd::char32&>(xtd::char32& value) {
600 return xtd::to_string(value, "G", std::locale());
601}
602
603template<>
604inline std::wstring __format_stringer<xtd::wchar, std::u8string&>(std::u8string& value) {
605 std::basic_stringstream<xtd::wchar> ss;
606 ss << std::wstring(value.begin(), value.end());
607 return ss.str();
608}
609
610template<>
611inline std::wstring __format_stringer<xtd::wchar, const std::u16string&>(const std::u16string& value) {
612 std::basic_stringstream<xtd::wchar> ss;
613 ss << __to_string<xtd::wchar>(value);
614 return ss.str();
615}
616
617template<>
618inline std::wstring __format_stringer<xtd::wchar, const std::u32string&>(const std::u32string& value) {
619 std::basic_stringstream<xtd::wchar> ss;
620 ss << __to_string<xtd::wchar>(value);
621 return ss.str();
622}
623
624template<>
625inline std::wstring __format_stringer<xtd::wchar, const std::string&>(const std::string& value) {
626 std::basic_stringstream<xtd::wchar> ss;
627 ss << __to_string<xtd::wchar>(value);
628 return ss.str();
629}
630
631template<>
632inline std::wstring __format_stringer<xtd::wchar, bool&>(bool& value) {
633 return xtd::to_string(value, L"G", std::locale());
634}
635
636template<>
637inline std::wstring __format_stringer<xtd::wchar, xtd::sbyte&>(xtd::sbyte& value) {
638 return xtd::to_string(value, L"G", std::locale());
639}
640
641template<>
642inline std::wstring __format_stringer<xtd::wchar, char&>(char& value) {
643 return xtd::to_string(value, L"G", std::locale());
644}
645
646template<>
647inline std::wstring __format_stringer<xtd::wchar, unsigned char&>(unsigned char& value) {
648 return xtd::to_string(value, L"G", std::locale());
649}
650
651template<>
652inline std::wstring __format_stringer<xtd::wchar, short&>(short& value) {
653 return xtd::to_string(value, L"G", std::locale());
654}
655
656template<>
657inline std::wstring __format_stringer<xtd::wchar, unsigned short&>(unsigned short& value) {
658 return xtd::to_string(value, L"G", std::locale());
659}
660
661template<>
662inline std::wstring __format_stringer<xtd::wchar, int&>(int& value) {
663 return xtd::to_string(value, L"G", std::locale());
664}
665
666template<>
667inline std::wstring __format_stringer<xtd::wchar, unsigned int&>(unsigned int& value) {
668 return xtd::to_string(value, L"G", std::locale());
669}
670
671template<>
672inline std::wstring __format_stringer<xtd::wchar, long&>(long& value) {
673 return xtd::to_string(value, L"G", std::locale());
674}
675
676template<>
677inline std::wstring __format_stringer<xtd::wchar, unsigned long&>(unsigned long& value) {
678 return xtd::to_string(value, L"G", std::locale());
679}
680
681template<>
682inline std::wstring __format_stringer<xtd::wchar, long long&>(long long& value) {
683 return xtd::to_string(value, L"G", std::locale());
684}
685
686template<>
687inline std::wstring __format_stringer<xtd::wchar, unsigned long long&>(unsigned long long& value) {
688 return xtd::to_string(value, L"G", std::locale());
689}
690
691template<>
692inline std::wstring __format_stringer<xtd::wchar, float&>(float& value) {
693 return xtd::to_string(value, L"G", std::locale());
694}
695
696template<>
697inline std::wstring __format_stringer<xtd::wchar, double&>(double& value) {
698 return xtd::to_string(value, L"G", std::locale());
699}
700
701template<>
702inline std::wstring __format_stringer<xtd::wchar, long double&>(long double& value) {
703 return xtd::to_string(value, L"G", std::locale());
704}
705
706template<>
707inline std::wstring __format_stringer<xtd::wchar, std::chrono::system_clock::time_point&> (std::chrono::system_clock::time_point& value) {
708 return xtd::to_string(value, L"G", std::locale());
709}
710
711template<>
712inline std::wstring __format_stringer<xtd::wchar, std::tm&> (tm& value) {
713 return xtd::to_string(value, L"G", std::locale());
714}
Contains string definitions.
Contains __xtd_std_version definitions.
Contains xtd::any type and std::bad_any_cast exception.
Contains std::chrono::days, std::chrono::weeks, std::chrono::months and std::chrono::years duration t...
size_type find(const basic_string &str) const
Finds the first substring equal to the given character sequence. Search begins at 0,...
Definition basic_string.hpp:1144
Provides functionality to format the value of an object into a string representation.
Definition iformatable.hpp:35
Supports all classes in the xtd class hierarchy and provides low-level services to derived classes....
Definition object.hpp:44
Contains xtd::collections::generic::ienumerable <type_t> interface.
xtd::basic_string< char > string
Represents text as a sequence of UTF-8 code units.
Definition __string_definitions.hpp:43
char8_t char8
Represents a 8-bit unicode character.
Definition char8.hpp:26
int8_t sbyte
Represents a 8-bit signed integer.
Definition sbyte.hpp:23
wchar_t wchar
Represents a wide character.
Definition wchar.hpp:24
char16_t char16
Represents a 16-bit unicode character.
Definition char16.hpp:26
char32_t char32
Represents a 32-bit unicode character.
Definition char32.hpp:23
std::any any
Represents the any alias on std::any.
Definition any.hpp:24
@ s
The S key.
Definition console_key.hpp:124
The xtd namespace contains all fundamental classes to access Hardware, Os, System,...
Definition abstract_object.hpp:8
string to_string() const noexcept override
Returns the string representation of this xtd::read_only_span <type_t> object.
Definition read_only_span.hpp:375
Contains xtd::optional type.
Contains xtd fundamental types.