Smaller sizeof for in place strings
This commit is contained in:
parent
386f41e1c5
commit
a33c8d9677
|
@ -138,37 +138,37 @@ int str_to_int(StringView str)
|
||||||
throw runtime_error{str + " is not a number"};
|
throw runtime_error{str + " is not a number"};
|
||||||
}
|
}
|
||||||
|
|
||||||
InplaceString<16> to_string(int val)
|
InplaceString<15> to_string(int val)
|
||||||
{
|
{
|
||||||
InplaceString<16> res;
|
InplaceString<15> res;
|
||||||
res.m_length = sprintf(res.m_data, "%i", val);
|
res.m_length = sprintf(res.m_data, "%i", val);
|
||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
|
|
||||||
InplaceString<24> to_string(size_t val)
|
InplaceString<23> to_string(size_t val)
|
||||||
{
|
{
|
||||||
InplaceString<24> res;
|
InplaceString<23> res;
|
||||||
res.m_length = sprintf(res.m_data, "%zu", val);
|
res.m_length = sprintf(res.m_data, "%zu", val);
|
||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
|
|
||||||
InplaceString<24> to_string(Hex val)
|
InplaceString<23> to_string(Hex val)
|
||||||
{
|
{
|
||||||
InplaceString<24> res;
|
InplaceString<23> res;
|
||||||
res.m_length = sprintf(res.m_data, "%zx", val.val);
|
res.m_length = sprintf(res.m_data, "%zx", val.val);
|
||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
|
|
||||||
InplaceString<24> to_string(float val)
|
InplaceString<23> to_string(float val)
|
||||||
{
|
{
|
||||||
InplaceString<24> res;
|
InplaceString<23> res;
|
||||||
res.m_length = sprintf(res.m_data, "%f", val);
|
res.m_length = sprintf(res.m_data, "%f", val);
|
||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
|
|
||||||
InplaceString<8> to_string(Codepoint c)
|
InplaceString<7> to_string(Codepoint c)
|
||||||
{
|
{
|
||||||
InplaceString<8> res;
|
InplaceString<7> res;
|
||||||
char* ptr = res.m_data;
|
char* ptr = res.m_data;
|
||||||
utf8::dump(ptr, c);
|
utf8::dump(ptr, c);
|
||||||
res.m_length = (int)(ptr - res.m_data);
|
res.m_length = (int)(ptr - res.m_data);
|
||||||
|
|
|
@ -263,21 +263,23 @@ Optional<int> str_to_int_ifp(StringView str);
|
||||||
template<size_t N>
|
template<size_t N>
|
||||||
struct InplaceString
|
struct InplaceString
|
||||||
{
|
{
|
||||||
constexpr operator StringView() const { return {m_data, m_length}; }
|
static_assert(N < 256, "InplaceString cannot handle sizes >= 256");
|
||||||
operator String() const { return {m_data, m_length}; }
|
|
||||||
|
|
||||||
ByteCount m_length;
|
constexpr operator StringView() const { return {m_data, ByteCount{m_length}}; }
|
||||||
|
operator String() const { return {m_data, ByteCount{m_length}}; }
|
||||||
|
|
||||||
|
unsigned char m_length;
|
||||||
char m_data[N];
|
char m_data[N];
|
||||||
};
|
};
|
||||||
|
|
||||||
struct Hex { size_t val; };
|
struct Hex { size_t val; };
|
||||||
inline Hex hex(size_t val) { return {val}; }
|
inline Hex hex(size_t val) { return {val}; }
|
||||||
|
|
||||||
InplaceString<16> to_string(int val);
|
InplaceString<15> to_string(int val);
|
||||||
InplaceString<24> to_string(size_t val);
|
InplaceString<23> to_string(size_t val);
|
||||||
InplaceString<24> to_string(Hex val);
|
InplaceString<23> to_string(Hex val);
|
||||||
InplaceString<24> to_string(float val);
|
InplaceString<23> to_string(float val);
|
||||||
InplaceString<8> to_string(Codepoint c);
|
InplaceString<7> to_string(Codepoint c);
|
||||||
|
|
||||||
template<typename RealType, typename ValueType>
|
template<typename RealType, typename ValueType>
|
||||||
decltype(to_string(std::declval<ValueType>()))
|
decltype(to_string(std::declval<ValueType>()))
|
||||||
|
|
Loading…
Reference in New Issue
Block a user