68VTK_ALWAYS_INLINE
auto to_chars(
char* first,
char* last,
const T& value,
int base = 10)
69 -> std::to_chars_result
71 const std::size_t buffer_size = std::distance(first, last);
74 return { first, std::errc::value_too_large };
76 const std::size_t buffer_size_1 = buffer_size - 1;
77 fmt::format_to_n_result<char*> result;
81 result = fmt::format_to_n(first, buffer_size_1, FMT_COMPILE(
"{:b}"), value);
84 result = fmt::format_to_n(first, buffer_size_1, FMT_COMPILE(
"{:o}"), value);
87 result = fmt::format_to_n(first, buffer_size_1, FMT_COMPILE(
"{:x}"), value);
91 result = fmt::format_to_n(first, buffer_size_1, FMT_COMPILE(
"{:d}"), value);
93 if (result.size >= buffer_size_1)
95 return { first + buffer_size_1, std::errc::value_too_large };
98 return { result.out, std::errc{} };
101VTK_ALWAYS_INLINE
auto to_chars(
char* first,
char* last,
const T& value, std::chars_format format)
102 -> std::to_chars_result
104 const std::size_t buffer_size = std::distance(first, last);
105 if (buffer_size == 0)
107 return { first, std::errc::value_too_large };
109 const std::size_t buffer_size_1 = buffer_size - 1;
110 fmt::format_to_n_result<char*> result;
113 case std::chars_format::scientific:
114 result = fmt::format_to_n(first, buffer_size_1, FMT_COMPILE(
"{:e}"), value);
116 case std::chars_format::fixed:
117 result = fmt::format_to_n(first, buffer_size_1, FMT_COMPILE(
"{:f}"), value);
119 case std::chars_format::hex:
120 result = fmt::format_to_n(first, buffer_size_1, FMT_COMPILE(
"{:a}"), value);
122 case std::chars_format::general:
124 result = fmt::format_to_n(first, buffer_size_1, FMT_COMPILE(
"{:g}"), value);
126 if (result.size >= buffer_size_1)
128 return { first + buffer_size_1, std::errc::value_too_large };
131 return { result.out, std::errc{} };
134VTK_ALWAYS_INLINE
auto to_chars(
char* first,
char* last,
const T& value, std::chars_format format,
135 int precision) -> std::to_chars_result
137 const std::size_t buffer_size = std::distance(first, last);
138 if (buffer_size == 0)
140 return { first, std::errc::value_too_large };
142 const std::size_t buffer_size_1 = buffer_size - 1;
143 fmt::format_to_n_result<char*> result;
146 case std::chars_format::scientific:
147 result = fmt::format_to_n(first, buffer_size_1, FMT_COMPILE(
"{:.{}e}"), value, precision);
149 case std::chars_format::fixed:
150 result = fmt::format_to_n(first, buffer_size_1, FMT_COMPILE(
"{:.{}f}"), value, precision);
152 case std::chars_format::hex:
153 result = fmt::format_to_n(first, buffer_size_1, FMT_COMPILE(
"{:.{}a}"), value, precision);
155 case std::chars_format::general:
157 result = fmt::format_to_n(first, buffer_size_1, FMT_COMPILE(
"{:.{}g}"), value, precision);
159 if (result.size >= buffer_size_1)
161 return { first + buffer_size_1, std::errc::value_too_large };
164 return { result.out, std::errc{} };
VTK_ALWAYS_INLINE auto to_chars(char *first, char *last, const T &value, int base=10) -> std::to_chars_result
Given a number, convert it to a string within char* first and char* last, and return a to_chars_resul...