diff options
| author | Maxime Coste <frrrwww@gmail.com> | 2015-08-18 21:06:53 +0100 |
|---|---|---|
| committer | Maxime Coste <frrrwww@gmail.com> | 2015-08-18 21:06:53 +0100 |
| commit | a33c8d9677ae81375f8e9567efc5b3e14ae026f5 (patch) | |
| tree | b6f412d75db7c5e0fdec0872ef54fe7e8d1c7701 /src/string.hh | |
| parent | 386f41e1c59cbd441ab2a4dcfc8ac95f5726105a (diff) | |
Smaller sizeof for in place strings
Diffstat (limited to 'src/string.hh')
| -rw-r--r-- | src/string.hh | 18 |
1 files changed, 10 insertions, 8 deletions
diff --git a/src/string.hh b/src/string.hh index c853ebe4..6970e74a 100644 --- a/src/string.hh +++ b/src/string.hh @@ -263,21 +263,23 @@ Optional<int> str_to_int_ifp(StringView str); template<size_t N> struct InplaceString { - constexpr operator StringView() const { return {m_data, m_length}; } - operator String() const { return {m_data, m_length}; } + static_assert(N < 256, "InplaceString cannot handle sizes >= 256"); - 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]; }; struct Hex { size_t val; }; inline Hex hex(size_t val) { return {val}; } -InplaceString<16> to_string(int val); -InplaceString<24> to_string(size_t val); -InplaceString<24> to_string(Hex val); -InplaceString<24> to_string(float val); -InplaceString<8> to_string(Codepoint c); +InplaceString<15> to_string(int val); +InplaceString<23> to_string(size_t val); +InplaceString<23> to_string(Hex val); +InplaceString<23> to_string(float val); +InplaceString<7> to_string(Codepoint c); template<typename RealType, typename ValueType> decltype(to_string(std::declval<ValueType>())) |
