diff options
author | Tim Jenssen <tim.jenssen@qt.io> | 2016-11-01 17:15:17 +0100 |
---|---|---|
committer | Tim Jenssen <tim.jenssen@qt.io> | 2016-11-01 16:17:21 +0000 |
commit | b31c3e0dcba1069511bc233e5e00fb3ec78e12bd (patch) | |
tree | cbe7d04b55ccf039d82a9f2a334676e282129ec3 /src/libs/utils/smallstringliteral.h | |
parent | 601dc5fc073702af4e9f7edccd10879b1f9d1a44 (diff) |
Utils: Changeable SmallString stack size
The size of the small string optimization was hard coded. For some use
cases you want a bigger or smaller size. It is now configurable by a
template parameter. For that we changed the name to BasicSmallString and
added an alias of BasicSmallString<31> to SmallString.
Change-Id: I844b4420d260290307a6018bb6cc4cf3ba7bd449
Reviewed-by: Tim Jenssen <tim.jenssen@qt.io>
Diffstat (limited to 'src/libs/utils/smallstringliteral.h')
-rw-r--r-- | src/libs/utils/smallstringliteral.h | 24 |
1 files changed, 13 insertions, 11 deletions
diff --git a/src/libs/utils/smallstringliteral.h b/src/libs/utils/smallstringliteral.h index a4b505a56b5..fdd720e0b3c 100644 --- a/src/libs/utils/smallstringliteral.h +++ b/src/libs/utils/smallstringliteral.h @@ -41,27 +41,27 @@ namespace Utils { -class SmallString; - -class SmallStringLiteral +template <int Size> +class BasicSmallStringLiteral { - friend class SmallString; + template<uint> + friend class BasicSmallString; public: using const_iterator = Internal::SmallStringIterator<std::random_access_iterator_tag, const char>; using const_reverse_iterator = std::reverse_iterator<const_iterator>; using size_type = std::size_t; - template<size_type Size> + template<size_type ArraySize> constexpr - SmallStringLiteral(const char(&string)[Size]) noexcept + BasicSmallStringLiteral(const char(&string)[ArraySize]) noexcept : m_data(string) { - static_assert(Size >= 1, "Invalid string literal! Length is zero!"); + static_assert(ArraySize >= 1, "Invalid string literal! Length is zero!"); } constexpr - SmallStringLiteral(const char *string, const size_type size) noexcept + BasicSmallStringLiteral(const char *string, const size_type size) noexcept : m_data(string, size) { } @@ -99,7 +99,7 @@ public: constexpr static size_type shortStringCapacity() noexcept { - return sizeof(Internal::ShortStringLayout) - 2; + return sizeof(Internal::ShortStringLayout<Size>) - 2; } bool isShortString() const noexcept @@ -118,14 +118,16 @@ public: } private: - SmallStringLiteral(Internal::StringDataLayout data) noexcept + BasicSmallStringLiteral(Internal::StringDataLayout<Size> data) noexcept : m_data(data) { } private: - Internal::StringDataLayout m_data; + Internal::StringDataLayout<Size> m_data; }; +using SmallStringLiteral = BasicSmallStringLiteral<31>; + } // namespace Utils #pragma pop_macro("noexcept") |