aboutsummaryrefslogtreecommitdiffstats
path: root/src/libs/utils/smallstringliteral.h
diff options
context:
space:
mode:
authorTim Jenssen <tim.jenssen@qt.io>2016-11-01 17:15:17 +0100
committerTim Jenssen <tim.jenssen@qt.io>2016-11-01 16:17:21 +0000
commitb31c3e0dcba1069511bc233e5e00fb3ec78e12bd (patch)
treecbe7d04b55ccf039d82a9f2a334676e282129ec3 /src/libs/utils/smallstringliteral.h
parent601dc5fc073702af4e9f7edccd10879b1f9d1a44 (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.h24
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")