5#define __XTD_STD_INTERNAL__
7#undef __XTD_STD_INTERNAL__
20#include <forward_list>
31#include <system_error>
35#include <unordered_map>
36#include <unordered_set>
52[[nodiscard]]
inline auto __codepoint_to_string(
xtd::char32 codepoint) -> std::basic_string<char_t> {
53 std::basic_string<char_t> result;
55 result.push_back(
static_cast<char_t
>(codepoint));
56 else if (codepoint < 0x800) {
57 result.push_back(
static_cast<char_t
>((codepoint >> 6) | 0xc0));
58 result.push_back(
static_cast<char_t
>((codepoint & 0x3f) | 0x80));
59 }
else if (codepoint < 0x10000) {
60 result.push_back(
static_cast<char_t
>((codepoint >> 12) | 0xe0));
61 result.push_back(
static_cast<char_t
>(((codepoint >> 6) & 0x3f) | 0x80));
62 result.push_back(
static_cast<char_t
>((codepoint & 0x3f) | 0x80));
64 result.push_back(
static_cast<char_t
>((codepoint >> 18) | 0xf0));
65 result.push_back(
static_cast<char_t
>(((codepoint >> 12) & 0x3f) | 0x80));
66 result.push_back(
static_cast<char_t
>(((codepoint >> 6) & 0x3f) | 0x80));
67 result.push_back(
static_cast<char_t
>((codepoint & 0x3f) | 0x80));
73[[nodiscard]]
inline auto __to_string(
char codepoint) -> std::basic_string<char_t> {
74 return __codepoint_to_string<char_t>(codepoint);
78[[nodiscard]]
inline auto __to_string(
xtd::char32 codepoint) -> std::basic_string<char_t> {
79 return __codepoint_to_string<char_t>(codepoint);
83[[nodiscard]]
inline auto __to_string(
xtd::char16 codepoint) -> std::basic_string<char_t> {
84 return __codepoint_to_string<char_t>(codepoint);
88[[nodiscard]]
inline auto __to_string(
xtd::char8 codepoint) -> std::basic_string<char_t> {
89 return __codepoint_to_string<char_t>(codepoint);
93[[nodiscard]]
inline auto __to_string(
xtd::wchar codepoint) -> std::basic_string<char_t> {
94 return __codepoint_to_string<char_t>(codepoint);
98[[nodiscard]]
inline auto __to_string(
const std::basic_string<char_t>& str) -> std::basic_string<char_t> {
99 std::basic_string<char_t> result;
100 std::for_each(str.begin(), str.end(), [&](
auto codepoint) {result += __to_string<char_t>(codepoint);});
104template<
class char_t,
class arg_t>
105[[nodiscard]]
inline auto __to_string(
const std::basic_string<arg_t>& str) -> std::basic_string<char_t> {
106 std::basic_string<char_t> result;
107 for (
auto codepoint : str)
108 result += __to_string<char_t>(codepoint);
112template<
class char_t,
class arg_t>
113[[nodiscard]]
inline auto __to_string(
const arg_t* str) -> std::basic_string<char_t> {
114 std::basic_string<char_t> result;
115 for (
auto codepoint : std::basic_string<arg_t>(str))
116 result += __to_string<char_t>(codepoint);
120auto operator <<(std::ostream& os,
const xtd::char8* str) -> std::ostream&;
121auto operator <<(std::ostream& os,
const xtd::char16* str) -> std::ostream&;
122auto operator <<(std::ostream& os,
const xtd::char32* str) -> std::ostream&;
123auto operator <<(std::ostream& os,
const xtd::wchar* str) -> std::ostream&;
125template<
class enum_t>
126[[nodiscard]]
auto __enum_to_string__(enum_t value)
noexcept -> std::string;
127[[nodiscard]]
auto __iformatable_to_string(
const xtd::iformatable& value)
noexcept -> std::string;
128[[nodiscard]]
auto __object_to_string__(
const xtd::object& value)
noexcept -> std::string;
130template<
class char_t,
class type_t,
class bool_t>
131struct __enum_ostream__ {};
133template <
class char_t,
class type_t >
134struct __enum_ostream__ < char_t, type_t, std::true_type > {
135 auto to_stream(std::basic_ostream<char_t>& os,
const type_t& value)
noexcept -> std::basic_ostream<char_t>& {
136 return os << __enum_to_string__(value);
140template <
class char_t,
class type_t,
class bool_t >
141struct __enum_or_polymorphic_ostream__ {};
143template <
class char_t,
class type_t >
144struct __enum_or_polymorphic_ostream__ < char_t, type_t, std::true_type > {
145 auto to_stream(std::basic_ostream<char_t>& os,
const type_t& value)
noexcept -> std::basic_ostream <char_t>& {
146 if (
dynamic_cast < const xtd::iformatable*
> (&value))
return os << __iformatable_to_string(dynamic_cast<const xtd::iformatable&>(value));
147 if (
dynamic_cast < const xtd::object*
> (&value))
return os << __object_to_string__(
dynamic_cast<const xtd::object&
>(value));
152template <
class char_t,
class type_t >
153struct __enum_or_polymorphic_ostream__ < char_t, type_t, std::false_type > {
154 auto to_stream(std::basic_ostream<char_t>& os,
const type_t& value)
noexcept -> std::basic_ostream<char_t>& {
155 __enum_ostream__ < char, type_t, typename std::is_enum < type_t>::type > ().to_stream(os, value);
160template <
class value_t >
161[[nodiscard]]
auto __format_stringer_to_std_string(
const value_t& value) -> std::string {
162 std::basic_stringstream<char> ss;
164 __enum_or_polymorphic_ostream__ < char, value_t, typename std::is_polymorphic < value_t>::type > ().to_stream(ss, value);
168[[nodiscard]]
auto __format_stringer_to_std_string(
const char& c) -> std::string;
169[[nodiscard]]
auto __format_stringer_to_std_string(
const xtd::char8& c) -> std::string;
170[[nodiscard]]
auto __format_stringer_to_std_string(
const xtd::char16& c) -> std::string;
171[[nodiscard]]
auto __format_stringer_to_std_string(
const xtd::char32& c) -> std::string;
172[[nodiscard]]
auto __format_stringer_to_std_string(
const xtd::wchar& c) -> std::string;
173[[nodiscard]]
auto __format_stringer_to_std_string(
const char* str) -> std::string;
174[[nodiscard]]
auto __format_stringer_to_std_string(
const xtd::char8* str) -> std::string;
175[[nodiscard]]
auto __format_stringer_to_std_string(
const xtd::char16* str) -> std::string;
176[[nodiscard]]
auto __format_stringer_to_std_string(
const xtd::char32* str) -> std::string;
177[[nodiscard]]
auto __format_stringer_to_std_string(
const xtd::wchar* str) -> std::string;
178[[nodiscard]]
auto __format_stringer_to_std_string(
const std::string& str) -> std::string;
179[[nodiscard]]
auto __format_stringer_to_std_string(
const xtd::string& str) -> std::string;
180[[nodiscard]]
auto __format_stringer_to_std_string(
const std::u8string& str) -> std::string;
181[[nodiscard]]
auto __format_stringer_to_std_string(
const std::u16string& str) -> std::string;
182[[nodiscard]]
auto __format_stringer_to_std_string(
const std::u32string& str) -> std::string;
183[[nodiscard]]
auto __format_stringer_to_std_string(
const std::wstring& str) -> std::string;
185template <
class char_t,
class value_t >
186[[nodiscard]]
inline auto __format_stringer(value_t value) -> std::basic_string<char_t> {
187 std::basic_stringstream<char_t> ss;
188 ss << __format_stringer_to_std_string(value).c_str();
192template <
class char_t,
class value_t >
193[[nodiscard]]
inline auto __format_stringer(
const bool& value) -> std::basic_string<char_t> {
194 std::basic_stringstream<char_t> ss;
195 ss << std::boolalpha << value;
199template <
class char_t,
class value_t, xtd::
int32 len >
200[[nodiscard]]
inline auto __format_stringer(
const char*& value) -> std::basic_string<char_t> {
201 std::basic_stringstream<char_t> ss;
202 ss << __to_string < char_t > (value);
206template <
class char_t,
class value_t, xtd::
int32 len >
207[[nodiscard]]
inline auto __format_stringer(
const char*
const& value) -> std::basic_string<char_t> {
208 std::basic_stringstream<char_t> ss;
209 ss << __to_string < char_t > (value);
213template <
class char_t,
class value_t >
214[[nodiscard]]
inline auto __format_stringer(
const xtd::char8*& value) -> std::basic_string<char_t> {
215 auto s = std::u8string(value);
216 std::basic_stringstream<char_t> ss;
217 ss << std::basic_string<char_t> (
s.begin(),
s.end());
221template <
class char_t,
class value_t >
222[[nodiscard]]
inline auto __format_stringer(
const xtd::char8*
const& value) -> std::basic_string<char_t> {
223 auto s = std::u8string(value);
224 std::basic_stringstream<char_t> ss;
225 ss << std::basic_string<char_t> (
s.begin(),
s.end());
229template <
class char_t,
class value_t >
230[[nodiscard]]
inline auto __format_stringer(
const xtd::char16*& value) -> std::basic_string<char_t> {
231 std::basic_stringstream<char_t> ss;
232 ss << __to_string < char_t > (value);
236template <
class char_t,
class value_t >
237[[nodiscard]]
inline auto __format_stringer(
const xtd::char16*
const& value) -> std::basic_string<char_t> {
238 std::basic_stringstream<char_t> ss;
239 ss << __to_string < char_t > (value);
243template <
class char_t,
class value_t >
244[[nodiscard]]
inline auto __format_stringer(
const xtd::char32*& value) -> std::basic_string<char_t> {
245 std::basic_stringstream<char_t> ss;
246 ss << __to_string < char_t > (value);
250template <
class char_t,
class value_t >
251[[nodiscard]]
inline auto __format_stringer(
const xtd::char32*
const& value) -> std::basic_string<char_t> {
252 std::basic_stringstream<char_t> ss;
253 ss << __to_string < char_t > (value);
257template <
class char_t,
class value_t >
258[[nodiscard]]
inline auto __format_stringer(
const xtd::wchar*& value) -> std::basic_string<char_t> {
259 std::basic_stringstream<char_t> ss;
260 ss << __to_string < char_t > (value);
264template <
class char_t,
class value_t >
265[[nodiscard]]
inline auto __format_stringer(
const xtd::wchar*
const& value) -> std::basic_string<char_t> {
266 std::basic_stringstream<char_t> ss;
267 ss << __to_string < char_t > (value);
272[[nodiscard]]
inline auto __format_stringer<char, std::u8string&>(std::u8string& value) -> std::string {
273 std::basic_stringstream < char > ss;
274 ss << std::string(value.begin(), value.end());
279[[nodiscard]]
inline auto __format_stringer<char, const std::u16string&>(
const std::u16string& value) -> std::string {
280 std::basic_stringstream < char > ss;
281 ss << __to_string < char > (value);
286[[nodiscard]]
inline auto __format_stringer<char, const std::u32string&>(
const std::u32string& value) -> std::string {
287 std::basic_stringstream < char > ss;
288 ss << __to_string < char > (value);
293[[nodiscard]]
inline auto __format_stringer<char, const std::wstring&>(
const std::wstring& value) -> std::string {
294 std::basic_stringstream < char > ss;
295 ss << __to_string < char > (value);
300[[nodiscard]]
inline auto __format_stringer<char, bool&>(
bool& value) -> std::string;
303[[nodiscard]]
inline auto __format_stringer<char, xtd::sbyte&>(
xtd::sbyte& value) -> std::string;
306[[nodiscard]]
inline auto __format_stringer<char, const unsigned char&>(
const unsigned char& value) -> std::string;
309[[nodiscard]]
inline auto __format_stringer<char, unsigned char&>(
unsigned char& value) -> std::string;
312[[nodiscard]]
inline auto __format_stringer<char, short&>(
short& value) -> std::string;
315[[nodiscard]]
inline auto __format_stringer<char, unsigned short&>(
unsigned short& value) -> std::string;
318[[nodiscard]]
inline auto __format_stringer<char, int&>(
int& value) -> std::string;
321[[nodiscard]]
inline auto __format_stringer<char, unsigned int&>(
unsigned int& value) -> std::string;
324[[nodiscard]]
inline auto __format_stringer<char, long&>(
long& value) -> std::string;
327[[nodiscard]]
inline auto __format_stringer<char, unsigned long&>(
unsigned long& value) -> std::string;
330[[nodiscard]]
inline auto __format_stringer<char, long long&>(
long long& value) -> std::string;
333[[nodiscard]]
inline auto __format_stringer<char, unsigned long long&>(
unsigned long long& value) -> std::string;
336[[nodiscard]]
inline auto __format_stringer<char, float&>(
float& value) -> std::string;
339[[nodiscard]]
inline auto __format_stringer<char, double&>(
double& value) -> std::string;
342[[nodiscard]]
inline auto __format_stringer<char, long double&>(
long double& value) -> std::string;
345[[nodiscard]]
inline auto __format_stringer<char, std::chrono::system_clock::time_point&>(std::chrono::system_clock::time_point& value) -> std::string;
348[[nodiscard]]
inline auto __format_stringer<char, std::tm&>(tm& value) -> std::string;
351[[nodiscard]]
inline auto __format_stringer<char, xtd::wchar&>(
xtd::wchar& value) -> std::string;
354[[nodiscard]]
inline auto __format_stringer<char, xtd::char8&>(
xtd::char8& value) -> std::string;
357[[nodiscard]]
inline auto __format_stringer<char, xtd::char16&>(
xtd::char16& value) -> std::string;
360[[nodiscard]]
inline auto __format_stringer<char, xtd::char32&>(
xtd::char32& value) -> std::string;
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...
Represents text as a sequence of character units.
Definition basic_string.hpp:66
Provides information about a specific culture (called a locale for unmanaged code development)....
Definition culture_info.hpp:43
Supports all classes in the xtd class hierarchy and provides low-level services to derived classes....
Definition object.hpp:45
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
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
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
@ s
The S key.
Definition console_key.hpp:124
Contains classes that define culture-related information, including language, country/region,...
Definition culture_info.hpp:20
The xtd namespace contains all fundamental classes to access Hardware, Os, System,...
Definition abstract_object.hpp:8
Contains xtd::optional type.
Contains xtd fundamental types.