xtd 0.2.0
Loading...
Searching...
No Matches
to_string_.hpp
Go to the documentation of this file.
1
4#pragma once
6#if !defined(__XTD_TO_STRING_INTERNAL__)
7#error "Do not include this file: Internal use only. Include <xtd/to_string> or <xtd/to_string.hpp> instead."
8#endif
10
11//#include "globalization/culture_info.hpp"
12#include "stream_insertable.hpp"
13#include "to_string.hpp"
14
16template<class range_t>
17std::string __xtd_range_to_string(const range_t& values, const xtd::string& fmt, const std::locale& loc);
18
19template<class value_t>
20inline xtd::string xtd::to_string(const value_t& value, const xtd::string& fmt, const std::locale& loc) {
21 if constexpr(std::is_polymorphic_v<value_t>) return __to_string_polymorphic(value, fmt, loc);
22 else if constexpr(std::is_enum_v<value_t>) return __enum_formatter<char>(fmt, value, loc);
23 #if defined(__xtd__cpp_lib_ranges)
24 else if constexpr(std::ranges::range<value_t> && !std::is_same_v<value_t, xtd::string>) return __xtd_range_to_string(value, fmt, loc);
25 #endif
26 else if constexpr(xtd::stream_insertable<value_t>) {
27 auto ss = std::stringstream {};
28 ss << value;
29 return ss.str();
31}
32
33template<>
34inline xtd::string xtd::to_string(const bool& value, const xtd::string& fmt, const std::locale& loc) {
35 return __boolean_formatter(fmt.chars(), value, loc);
36}
37
38template<>
39inline xtd::string xtd::to_string(const sbyte& value, const xtd::string& fmt, const std::locale& loc) {
40 return __numeric_formatter(fmt.chars(), value, loc);
41}
42
43template<>
44inline xtd::string xtd::to_string(const char& value, const xtd::string& fmt, const std::locale& loc) {
45 return __character_formatter(fmt.chars(), value, loc);
46}
47
48template<>
49inline xtd::string xtd::to_string(const unsigned char& value, const xtd::string& fmt, const std::locale& loc) {
50 return __numeric_formatter(fmt.chars(), value, loc);
51}
52
53template<>
54inline xtd::string xtd::to_string(const short& value, const xtd::string& fmt, const std::locale& loc) {
55 return __numeric_formatter(fmt.chars(), value, loc);
56}
57
58template<>
59inline xtd::string xtd::to_string(const unsigned short& value, const xtd::string& fmt, const std::locale& loc) {
60 return __numeric_formatter(fmt.chars(), value, loc);
61}
62
63template<>
64inline xtd::string xtd::to_string(const int& value, const xtd::string& fmt, const std::locale& loc) {
65 return __numeric_formatter(fmt.chars(), value, loc);
66}
67
68template<>
69inline xtd::string xtd::to_string(const unsigned int& value, const xtd::string& fmt, const std::locale& loc) {
70 return __numeric_formatter(fmt.chars(), value, loc);
71}
72
73template<>
74inline xtd::string xtd::to_string(const long& value, const xtd::string& fmt, const std::locale& loc) {
75 return __numeric_formatter(fmt.chars(), value, loc);
76}
77
78template<>
79inline xtd::string xtd::to_string(const unsigned long& value, const xtd::string& fmt, const std::locale& loc) {
80 return __numeric_formatter(fmt.chars(), value, loc);
81}
82
83template<>
84inline xtd::string xtd::to_string(const long long& value, const xtd::string& fmt, const std::locale& loc) {
85 return __numeric_formatter(fmt.chars(), value, loc);
86}
87
88template<>
89inline xtd::string xtd::to_string(const unsigned long long& value, const xtd::string& fmt, const std::locale& loc) {
90 return __numeric_formatter(fmt.chars(), value, loc);
91}
92
93template<>
94inline xtd::string xtd::to_string(const float& value, const xtd::string& fmt, const std::locale& loc) {
95 return __floating_point_formatter(fmt.chars(), value, loc);
96}
97
98template<>
99inline xtd::string xtd::to_string(const double& value, const xtd::string& fmt, const std::locale& loc) {
100 return __floating_point_formatter(fmt.chars(), value, loc);
101}
102
103template<>
104inline xtd::string xtd::to_string(const long double& value, const xtd::string& fmt, const std::locale& loc) {
105 return __floating_point_formatter(fmt.chars(), value, loc);
106}
107
108template<>
109inline xtd::string xtd::to_string(const std::chrono::system_clock::time_point& value, const xtd::string& fmt, const std::locale& loc) {
110 return __date_time_formatter(fmt.chars(), std::chrono::system_clock::to_time_t(value), std::chrono::duration_cast<std::chrono::nanoseconds>(value.time_since_epoch()).count() % 1000000000, loc);
111}
112
113template<>
114inline xtd::string xtd::to_string(const std::tm& value, const xtd::string& fmt, const std::locale& loc) {
115 return __date_time_formatter(fmt.chars(), value, 0, loc);
116}
117
118template<class type_t, class period_t>
119inline xtd::string xtd::to_string(const std::chrono::duration<type_t, period_t>& value, const xtd::string& fmt, const std::locale& loc) {
120 return __duration_formatter(fmt.chars(), value, loc);
121}
122
123template<>
124inline xtd::string xtd::to_string(const char8& value, const xtd::string& fmt, const std::locale& loc) {
125 return __character_formatter(fmt.chars(), value, loc);
126}
127
128template<>
129inline xtd::string xtd::to_string(const char16& value, const xtd::string& fmt, const std::locale& loc) {
130 return __character_formatter(fmt.chars(), value, loc);
131}
132
133template<>
134inline xtd::string xtd::to_string(const char32& value, const xtd::string& fmt, const std::locale& loc) {
135 return __character_formatter(fmt.chars(), value, loc);
136}
137
138template<>
139inline xtd::string xtd::to_string(const wchar& value, const xtd::string& fmt, const std::locale& loc) {
140 return __character_formatter(fmt.chars(), value, loc);
141}
142
143template<class value_t>
144inline xtd::string xtd::to_string(const value_t& value, const xtd::string& fmt) {
145 return to_string(value, fmt, std::locale());
146}
147
148inline xtd::string xtd::to_string(const char* value, const xtd::string& fmt) {
149 return to_string(value, fmt, std::locale());
150}
151
152template<>
153inline xtd::string xtd::to_string(const std::partial_ordering& value, const xtd::string& fmt, const std::locale& loc) {
154 if (value == std::partial_ordering::less) return "less";
155 if (value == std::partial_ordering::greater) return "greater";
156 return "equivalent";
157}
158
159template<>
160inline xtd::string xtd::to_string(const std::strong_ordering& value, const xtd::string& fmt, const std::locale& loc) {
161 if (value == std::strong_ordering::less) return "less";
162 if (value == std::strong_ordering::greater) return "greater";
163 return "equivalent";
164}
165
166template<>
167inline xtd::string xtd::to_string(const std::weak_ordering& value, const xtd::string& fmt, const std::locale& loc) {
168 if (value == std::weak_ordering::less) return "less";
169 if (value == std::weak_ordering::greater) return "greater";
170 return "equivalent";
171}
172
173template<class value_t>
174inline xtd::string xtd::to_string(const value_t* value, const xtd::string& fmt, const std::locale& loc) {
175 if (!value) return "(null)";
176 return __numeric_formatter(fmt.chars(), reinterpret_cast<intptr>(value), loc);
177}
178
179template<class value_t>
180inline xtd::string xtd::to_string(value_t* const value, const xtd::string& fmt, const std::locale& loc) {
181 if (!value) return "(null)";
182 return __numeric_formatter(fmt.chars(), reinterpret_cast<intptr>(value), loc);
183}
184
185template<class type_t>
186inline xtd::string xtd::to_string(const std::shared_ptr<type_t>& value, const xtd::string& fmt, const std::locale& loc) {
187 if (!value) return "(null)";
188 return __numeric_formatter(fmt.chars(), reinterpret_cast<intptr>(value.get()), loc);
189}
190
191template<class type_t>
192inline xtd::string xtd::to_string(const std::unique_ptr<type_t>& value, const xtd::string& fmt, const std::locale& loc) {
193 if (!value) return "(null)";
194 return __numeric_formatter(fmt.chars(), reinterpret_cast<intptr>(value.get()), loc);
195}
196
197template<>
198inline xtd::string xtd::to_string(const xtd::any& value, const xtd::string& fmt, const std::locale& loc) {
199 auto iterator = __any_stringer__.find(std::type_index(value.type()));
200 return iterator != __any_stringer__.cend() ? xtd::to_string(iterator->second(value), fmt, loc) : "(unregistered)";
201}
202
203template<class type_t>
204inline xtd::string xtd::to_string(const std::optional<type_t>& value, const xtd::string& fmt, const std::locale& loc) {
205 return !value.has_value() ? "(null)" : std::string {"("} + to_string(value.value(), fmt, loc).chars() + std::string {")"};
206}
207
208template<>
209inline xtd::string xtd::to_string(const std::nullopt_t& value, const xtd::string& fmt, const std::locale& loc) {
210 return "(null)";
211}
212
213template<>
214inline xtd::string xtd::to_string(const std::nullptr_t&, const xtd::string& fmt, const std::locale& loc) {
215 return "null";
216}
217
218template<class type1_t, class type2_t>
219inline xtd::string xtd::to_string(const std::pair<type1_t, type2_t>& value, const xtd::string& fmt, const std::locale& loc) {
220 return std::string {"("} + to_string(value.first, fmt, loc).chars() + std::string {", "} + to_string(value.second, fmt, loc).chars() + std::string {")"};
221}
222
223template<class type_t, unsigned n_t, unsigned last_t>
224inline xtd::string xtd::__xtd_tuple_stringer<type_t, n_t, last_t>::to_string(const std::string& str, const type_t& value, const xtd::string& fmt, const std::locale& loc) {
225 return __xtd_tuple_stringer < type_t, n_t + 1, last_t >::to_string(str + xtd::to_string(std::get<n_t>(value), fmt, loc).chars() + ", ", value, fmt, loc);
226}
227
228template<class type_t, unsigned n_t>
229inline xtd::string xtd::__xtd_tuple_stringer<type_t, n_t, n_t>::to_string(const std::string& str, const type_t& value, const xtd::string& fmt, const std::locale& loc) {
230 return str + xtd::to_string(std::get<n_t>(value), fmt, loc).chars();
231}
232
233template<class ...types_t>
234inline xtd::string xtd::to_string(const std::tuple<types_t ...>& value, const xtd::string& fmt, const std::locale& loc) {
235 return __xtd_tuple_stringer < std::tuple<types_t ...>, 0, sizeof...(types_t) - 1 >::to_string(std::string {"("}, value, fmt, loc) + ")";
236}
237
238template<class iterator_t>
239inline std::string __xtd_iterator_to_string(const std::string& str, iterator_t iterator, const iterator_t& begin, const iterator_t& end, const xtd::string& fmt, const std::locale& loc) {
240 if (iterator == end) return str;
241 auto new_str = str + (iterator == begin ? std::string {} : std::string {", "}) + xtd::to_string(*iterator, fmt, loc).chars();
242 return __xtd_iterator_to_string(new_str, ++iterator, begin, end, fmt, loc);
243}
244
245template<class iterator_t>
246inline std::string __xtd_sequence_container_to_string(const iterator_t& begin, const iterator_t& end, const xtd::string& fmt, const std::locale& loc) {
247 return __xtd_iterator_to_string("[", begin, begin, end, fmt, loc) + "]";
248}
249
250template<class range_t>
251inline std::string __xtd_range_to_string(const range_t& values, const xtd::string& fmt, const std::locale& loc) {
252 std::ostringstream oss;
253 oss.imbue(loc);
254 oss << "[";
255 bool first = true;
256 for (auto&& v : values) {
257 if (!first) oss << ", ";
258 first = false;
259 oss << xtd::to_string(v, fmt, loc);
260 }
261 oss << "]";
262 return oss.str();
263}
264
265template<class type_t, size_t size>
266inline xtd::string xtd::to_string(const std::array<type_t, size>& values, const xtd::string& fmt, const std::locale& loc) {
267 return __xtd_sequence_container_to_string(values.begin(), values.end(), fmt, loc);
268}
269
270template<size_t size>
271inline xtd::string xtd::to_string(const std::bitset<size>& values, const xtd::string& fmt, const std::locale& loc) {
272 auto result = xtd::string {"["};
273 for (auto index = size_t {0}; index < values.length(); ++index)
274 result += (index ? ", " : "") + to_string(static_cast<bool>(values[index]), fmt, loc);
275 return result + "]";
276}
277
278template<class type_t, class allocator_t>
279inline xtd::string xtd::to_string(const std::deque<type_t, allocator_t>& values, const xtd::string& fmt, const std::locale& loc) {
280 return __xtd_sequence_container_to_string(values.begin(), values.end(), fmt, loc);
281}
282
283template<class type_t, class allocator_t>
284inline xtd::string xtd::to_string(const std::forward_list<type_t, allocator_t>& values, const xtd::string& fmt, const std::locale& loc) {
285 return __xtd_sequence_container_to_string(values.begin(), values.end(), fmt, loc);
286}
287
288template<class type_t>
289inline xtd::string xtd::to_string(const std::initializer_list<type_t>& values, const xtd::string& fmt, const std::locale& loc) {
290 return __xtd_sequence_container_to_string(values.begin(), values.end(), fmt, loc);
291}
292
293template<class type_t, class allocator_t>
294inline xtd::string xtd::to_string(const std::list<type_t, allocator_t>& values, const xtd::string& fmt, const std::locale& loc) {
295 return __xtd_sequence_container_to_string(values.begin(), values.end(), fmt, loc);
296}
297
298template<class type_t, class container_t>
299inline xtd::string xtd::to_string(const std::queue<type_t, container_t>& values, const xtd::string& fmt, const std::locale& loc) {
300 struct std_queue : public std::queue<type_t> {
301 std_queue(const std::queue<type_t>& queue) : ptr {reinterpret_cast<const std_queue*>(&queue)} {}
302 auto begin() const {return ptr->c.begin();}
303 auto end() const {return ptr->c.end();}
304 const std_queue* ptr;
305 };
306 auto items = std_queue {values};
307 return __xtd_sequence_container_to_string(items.begin(), items.end(), fmt, loc);
308}
309
310template<class type_t, class container_t>
311inline xtd::string xtd::to_string(const std::priority_queue<type_t, container_t>& values, const xtd::string& fmt, const std::locale& loc) {
312 struct std_priority_queue : public std::queue<type_t> {
313 std_priority_queue(const std::priority_queue<type_t>& queue) : ptr {reinterpret_cast<const std_priority_queue*>(&queue)} {}
314 auto begin() const {return ptr->c.begin();}
315 auto end() const {return ptr->c.end();}
316 const std_priority_queue* ptr;
317 };
318 auto items = std_priority_queue {values};
319 return __xtd_sequence_container_to_string(items.begin(), items.end(), fmt, loc);
320}
321
322template<class type_t, class container_t>
323inline xtd::string xtd::to_string(const std::stack<type_t, container_t>& values, const xtd::string& fmt, const std::locale& loc) {
324 struct std_stack : public std::stack<type_t> {
325 std_stack(const std::stack<type_t>& queue) : ptr {reinterpret_cast<const std_stack*>(&queue)} {}
326 auto begin() const {return ptr->c.begin();}
327 auto end() const {return ptr->c.end();}
328 const std_stack* ptr;
329 };
330 auto items = std_stack {values};
331 return __xtd_sequence_container_to_string(items.begin(), items.end(), fmt, loc);
332}
333
334template<class type_t>
335inline xtd::string xtd::to_string(const std::valarray<type_t>& values, const xtd::string& fmt, const std::locale& loc) {
336 return __xtd_sequence_container_to_string(std::begin(values), std::end(values), fmt, loc);
337}
338
339template<class type_t, class allocator_t>
340inline xtd::string xtd::to_string(const std::vector<type_t, allocator_t>& values, const xtd::string& fmt, const std::locale& loc) {
341 return __xtd_sequence_container_to_string(values.begin(), values.end(), fmt, loc);
342}
343
344template<class iterator_t>
345inline std::string __xtd_associative_container_to_string(const iterator_t& begin, const iterator_t& end, const xtd::string& fmt, const std::locale& loc) {
346 return __xtd_iterator_to_string("{", begin, begin, end, fmt, loc) + "}";
347}
348
349template<class key_t, class value_t, class compare_t, class allocator_t>
350inline xtd::string xtd::to_string(const std::map<key_t, value_t, compare_t, allocator_t>& values, const xtd::string& fmt, const std::locale& loc) {
351 return __xtd_associative_container_to_string(values.begin(), values.end(), fmt, loc);
352}
353
354template<class key_t, class value_t, class compare_t, class allocator_t>
355inline xtd::string xtd::to_string(const std::multimap<key_t, value_t, compare_t, allocator_t>& values, const xtd::string& fmt, const std::locale& loc) {
356 return __xtd_associative_container_to_string(values.begin(), values.end(), fmt, loc);
357}
358
359template<class key_t, class compare_t, class allocator_t>
360inline xtd::string xtd::to_string(const std::multiset<key_t, compare_t, allocator_t>& values, const xtd::string& fmt, const std::locale& loc) {
361 return __xtd_associative_container_to_string(values.begin(), values.end(), fmt, loc);
362}
363
364template<class key_t, class compare_t, class allocator_t>
365inline xtd::string xtd::to_string(const std::set<key_t, compare_t, allocator_t>& values, const xtd::string& fmt, const std::locale& loc) {
366 return __xtd_associative_container_to_string(values.begin(), values.end(), fmt, loc);
367}
368
369template<class key_t, class value_t, class compare_t, class allocator_t>
370inline xtd::string xtd::to_string(const std::unordered_map<key_t, value_t, compare_t, allocator_t>& values, const xtd::string& fmt, const std::locale& loc) {
371 return __xtd_associative_container_to_string(values.begin(), values.end(), fmt, loc);
372}
373
374template<class key_t, class value_t, class compare_t, class allocator_t>
375inline xtd::string xtd::to_string(const std::unordered_multimap<key_t, value_t, compare_t, allocator_t>& values, const xtd::string& fmt, const std::locale& loc) {
376 return __xtd_associative_container_to_string(values.begin(), values.end(), fmt, loc);
377}
378
379template<class key_t, class compare_t, class allocator_t>
380inline xtd::string xtd::to_string(const std::unordered_multiset<key_t, compare_t, allocator_t>& values, const xtd::string& fmt, const std::locale& loc) {
381 return __xtd_associative_container_to_string(values.begin(), values.end(), fmt, loc);
382}
383
384template<class key_t, class compare_t, class allocator_t>
385inline xtd::string xtd::to_string(const std::unordered_set<key_t, compare_t, allocator_t>& values, const xtd::string& fmt, const std::locale& loc) {
386 return __xtd_associative_container_to_string(values.begin(), values.end(), fmt, loc);
387}
388
389template<class type_t>
390inline xtd::string xtd::to_string(type_t value, const std::initializer_list<std::pair<type_t, xtd::string>>& il) {
391 std::map<type_t, xtd::string, std::greater<type_t>> values;
392 for (auto item : il) values[item.first] = item.second;
393 return to_string(value, values);
394}
395
396#if defined(__xtd__cpp_lib_ranges)
397template <std::ranges::range range_t>
398inline xtd::string to_string(const range_t& values, const xtd::string& fmt, const std::locale& loc) {
399 return __xtd_range_to_string(values, fmt, loc);
400}
401#endif
402
403template<class type_t>
404inline xtd::string xtd::to_string(const xtd::collections::generic::ienumerable<type_t>& values, const xtd::string& fmt, const std::locale& loc) {
405 return __xtd_sequence_container_to_string(values.begin(), values.end(), fmt, loc);
406}
407
408template<class type_t>
409inline xtd::string xtd::to_string(const xtd::collections::generic::helpers::raw_array<type_t>& values, const xtd::string& fmt, const std::locale& loc) {
410 return __xtd_sequence_container_to_string(values.begin(), values.end(), fmt, loc);
411}
412
413template<class type_t, class string_t>
414inline string_t xtd::to_string(type_t value, const std::map<type_t, string_t, std::greater<type_t>>& values) {
415 auto it = values.find(value);
416 if (it != values.end()) return it->second;
417 string_t result;
418 long long rest = static_cast<long long>(value);
419 for (auto item : values) {
420 if (static_cast<long long>(item.first) != 0 && (rest & static_cast<long long>(item.first)) == static_cast<long long>(item.first)) {
421 if (!result.empty()) result = string_t {',', ' '} + result;
422 result = item.second + result;
423 rest -= static_cast<long long>(item.first);
424 }
425 }
426 if (!result.empty()) return result;
427 return to_string(static_cast<long long>(value), string_t {'G'}, std::locale());
428}
429
430template<class type_t, class string_t>
431inline string_t xtd::to_string(type_t value, const std::map<type_t, string_t>& values) {
432 std::map<type_t, string_t, std::greater<type_t>> descending_values;
433 for (auto item : values) descending_values[item.first] = item.second;
434 return to_string(value, descending_values);
435}
436
437template<class char_t, class value_t>
438inline std::basic_string<char_t> __string_formatter(const std::basic_string<char_t>& fmt, value_t value, const std::locale& loc) {
439 return __format_stringer<char_t>(value);
440}
441
442template < >
443inline std::string __format_stringer < char, bool& > (bool& value) {
444 return xtd::to_string(value, "G", std::locale());
445}
446
447template < >
448inline std::string __format_stringer < char, xtd::sbyte& > (xtd::sbyte& value) {
449 return xtd::to_string(value, "G", std::locale());
450}
451
452template < >
453inline std::string __format_stringer < char, const unsigned char& > (const unsigned char& value) {
454 return xtd::to_string(value, "G", std::locale());
455}
456
457template < >
458inline std::string __format_stringer < char, unsigned char& > (unsigned char& value) {
459 return xtd::to_string(value, "G", std::locale());
460}
461
462template < >
463inline std::string __format_stringer < char, short& > (short& value) {
464 return xtd::to_string(value, "G", std::locale());
465}
466
467template < >
468inline std::string __format_stringer < char, unsigned short& > (unsigned short& value) {
469 return xtd::to_string(value, "G", std::locale());
470}
471
472template < >
473inline std::string __format_stringer < char, int& > (int& value) {
474 return xtd::to_string(value, "G", std::locale());
475}
476
477template < >
478inline std::string __format_stringer < char, unsigned int& > (unsigned int& value) {
479 return xtd::to_string(value, "G", std::locale());
480}
481
482template < >
483inline std::string __format_stringer < char, long& > (long& value) {
484 return xtd::to_string(value, "G", std::locale());
485}
486
487template < >
488inline std::string __format_stringer < char, unsigned long& > (unsigned long& value) {
489 return xtd::to_string(value, "G", std::locale());
490}
491
492template < >
493inline std::string __format_stringer < char, long long& > (long long& value) {
494 return xtd::to_string(value, "G", std::locale());
495}
496
497template < >
498inline std::string __format_stringer < char, unsigned long long& > (unsigned long long& value) {
499 return xtd::to_string(value, "G", std::locale());
500}
501
502template < >
503inline std::string __format_stringer < char, float& > (float& value) {
504 return xtd::to_string(value, "G", std::locale());
505}
506
507template < >
508inline std::string __format_stringer < char, double& > (double& value) {
509 return xtd::to_string(value, "G", std::locale());
510}
511
512template < >
513inline std::string __format_stringer < char, long double& > (long double& value) {
514 return xtd::to_string(value, "G", std::locale());
515}
516
517template < >
518inline std::string __format_stringer < char, std::chrono::system_clock::time_point& > (std::chrono::system_clock::time_point& value) {
519 return xtd::to_string(value, "G", std::locale());
520}
521
522template < >
523inline std::string __format_stringer < char, std::tm& > (tm& value) {
524 return xtd::to_string(value, "G", std::locale());
525}
526
527template < >
528inline std::string __format_stringer < char, xtd::wchar& > (xtd::wchar& value) {
529 return xtd::to_string(value, "G", std::locale());
530}
531
532template < >
533inline std::string __format_stringer < char, xtd::char8& > (xtd::char8& value) {
534 return xtd::to_string(value, "G", std::locale());
535}
536
537template < >
538inline std::string __format_stringer < char, xtd::char16& > (xtd::char16& value) {
539 return xtd::to_string(value, "G", std::locale());
540}
541
542template < >
543inline std::string __format_stringer < char, xtd::char32& > (xtd::char32& value) {
544 return xtd::to_string(value, "G", std::locale());
545}
546
547template<class char_t, class type_t, class period_t = std::ratio<1>>
548std::basic_ostream<char_t>& operator <<(std::basic_ostream<char_t>& os, const std::chrono::duration<type_t, period_t>& value) {
549 return os << xtd::to_string(value, std::basic_string<char_t> {'G'}, std::locale());
550}
551
552template < class char_t, class type_t >
553struct __enum_ostream__ < char_t, type_t, std::false_type > {
554 std::basic_ostream < char_t >& to_stream(std::basic_ostream < char_t >& os, const type_t& value) noexcept {
555 //return os << value;
556 return os << xtd::to_string(value, std::basic_string < char_t > {}, std::locale {});
557 }
558};
const base_type & chars() const noexcept
Returns a reference to the underlying base type.
Definition basic_string.hpp:354
virtual auto begin() const -> const_iterator
Returns an iterator to the first element of the enumerable.
Definition enumerable_iterators.hpp:140
virtual auto end() const -> const_iterator
Returns an iterator to the element following the last element of the enumerable.
Definition enumerable_iterators.hpp:155
virtual auto cend() const -> const_iterator
Returns an iterator to the element following the last element of the enumerable.
Definition enumerable_iterators.hpp:151
Internal vector-like container used as a storage backend for xtd collections.
Definition raw_array.hpp:29
Exposes the enumerator, which supports a simple iteration over a collection of a specified type.
Definition ienumerable.hpp:40
static auto throws(xtd::helpers::exception_case exception_case, const source_location &location=source_location::current()) -> void
Throws an exption with specified exception case.
Concept stream_insertable.
Definition stream_insertable.hpp:26
generic::queue< xtd::any_object > queue
Represents a first-in, first-out collection of objects.
Definition queue.hpp:27
@ format
The format is not valid.
Definition exception_case.hpp:51
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
std::int8_t sbyte
Represents a 8-bit signed integer.
Definition sbyte.hpp:23
wchar_t wchar
Represents a wide character.
Definition wchar.hpp:24
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
xtd::sptr< type_t > ptr
The xtd::ptr object is a shared pointer.
Definition ptr.hpp:27
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
const_iterator begin() const
Returns an iterator to the beginning.
Definition read_only_span.hpp:183
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
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
Contains xtd::stream_insertable concept.
Contains xtd::to_string methods.