Use std::to_chars to int to str conversion
This commit is contained in:
parent
5c6238ef11
commit
d2f9bc8d80
|
@ -4,6 +4,7 @@
|
||||||
#include "utf8_iterator.hh"
|
#include "utf8_iterator.hh"
|
||||||
#include "unit_tests.hh"
|
#include "unit_tests.hh"
|
||||||
|
|
||||||
|
#include <charconv>
|
||||||
#include <cstdio>
|
#include <cstdio>
|
||||||
|
|
||||||
namespace Kakoune
|
namespace Kakoune
|
||||||
|
@ -146,53 +147,57 @@ int str_to_int(StringView str)
|
||||||
throw runtime_error{str + " is not a number"};
|
throw runtime_error{str + " is not a number"};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
template<size_t N>
|
||||||
|
InplaceString<N> to_string_impl(auto val, auto format)
|
||||||
|
{
|
||||||
|
InplaceString<N> res;
|
||||||
|
auto [end, errc] = std::to_chars(res.m_data, res.m_data + N, val, format);
|
||||||
|
if (errc != std::errc{})
|
||||||
|
throw runtime_error("to_string error");
|
||||||
|
res.m_length = end - res.m_data;
|
||||||
|
*end = '\0';
|
||||||
|
return res;
|
||||||
|
}
|
||||||
|
|
||||||
|
template<size_t N>
|
||||||
|
InplaceString<N> to_string_impl(auto val)
|
||||||
|
{
|
||||||
|
return to_string_impl<N>(val, 10);
|
||||||
|
}
|
||||||
|
|
||||||
InplaceString<15> to_string(int val)
|
InplaceString<15> to_string(int val)
|
||||||
{
|
{
|
||||||
InplaceString<15> res;
|
return to_string_impl<15>(val);
|
||||||
res.m_length = sprintf(res.m_data, "%i", val);
|
|
||||||
return res;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
InplaceString<15> to_string(unsigned val)
|
InplaceString<15> to_string(unsigned val)
|
||||||
{
|
{
|
||||||
InplaceString<15> res;
|
return to_string_impl<15>(val);
|
||||||
res.m_length = sprintf(res.m_data, "%u", val);
|
|
||||||
return res;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
InplaceString<23> to_string(long int val)
|
InplaceString<23> to_string(long int val)
|
||||||
{
|
{
|
||||||
InplaceString<23> res;
|
return to_string_impl<23>(val);
|
||||||
res.m_length = sprintf(res.m_data, "%li", val);
|
|
||||||
return res;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
InplaceString<23> to_string(long long int val)
|
InplaceString<23> to_string(long long int val)
|
||||||
{
|
{
|
||||||
InplaceString<23> res;
|
return to_string_impl<23>(val);
|
||||||
res.m_length = sprintf(res.m_data, "%lli", val);
|
|
||||||
return res;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
InplaceString<23> to_string(unsigned long val)
|
InplaceString<23> to_string(unsigned long val)
|
||||||
{
|
{
|
||||||
InplaceString<23> res;
|
return to_string_impl<23>(val);
|
||||||
res.m_length = sprintf(res.m_data, "%lu", val);
|
|
||||||
return res;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
InplaceString<23> to_string(Hex val)
|
InplaceString<23> to_string(Hex val)
|
||||||
{
|
{
|
||||||
InplaceString<23> res;
|
return to_string_impl<23>(val.val, 16);
|
||||||
res.m_length = sprintf(res.m_data, "%zx", val.val);
|
|
||||||
return res;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
InplaceString<23> to_string(float val)
|
InplaceString<23> to_string(float val)
|
||||||
{
|
{
|
||||||
InplaceString<23> res;
|
return to_string_impl<23>(val, std::chars_format::general);
|
||||||
res.m_length = sprintf(res.m_data, "%f", val);
|
|
||||||
return res;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
InplaceString<7> to_string(Codepoint c)
|
InplaceString<7> to_string(Codepoint c)
|
||||||
|
|
Loading…
Reference in New Issue
Block a user