forked from qt-creator/qt-creator
Utils: Introduce flexible constructor for SmallString and SmallStringView
If a class has a data method that returns a char pointer it can be used to construct a SmallString and a SmallStringView. Change-Id: I02dcba50babb3074b58998e5f907799e84361ed7 Reviewed-by: Ivan Donchevskii <ivan.donchevskii@qt.io>
This commit is contained in:
@@ -126,13 +126,17 @@ public:
|
||||
: BasicSmallString(BasicSmallString::fromQString(qString))
|
||||
{}
|
||||
|
||||
template<typename Type,
|
||||
typename = std::enable_if_t<std::is_same<std::decay_t<Type>, std::string>::value>
|
||||
>
|
||||
BasicSmallString(Type &&string)
|
||||
: BasicSmallString(string.data(), string.size())
|
||||
BasicSmallString(const QByteArray &qByteArray)
|
||||
: BasicSmallString(qByteArray.constData(), qByteArray.size())
|
||||
{}
|
||||
|
||||
template<typename String,
|
||||
typename Utils::enable_if_has_char_data_pointer<String> = 0>
|
||||
BasicSmallString(const String &string)
|
||||
: BasicSmallString(string.data(), string.size())
|
||||
{
|
||||
}
|
||||
|
||||
template<typename BeginIterator,
|
||||
typename EndIterator,
|
||||
typename = std::enable_if_t<std::is_same<BeginIterator, EndIterator>::value>
|
||||
|
@@ -34,6 +34,18 @@
|
||||
|
||||
namespace Utils {
|
||||
|
||||
template <typename String>
|
||||
using enable_if_has_char_data_pointer = typename std::enable_if_t<
|
||||
std::is_same<
|
||||
std::remove_const_t<
|
||||
std::remove_pointer_t<
|
||||
std::result_of_t<
|
||||
decltype(&String::data)(String)
|
||||
>
|
||||
>
|
||||
>, char>::value
|
||||
, int>;
|
||||
|
||||
class SmallStringView
|
||||
{
|
||||
public:
|
||||
@@ -67,7 +79,9 @@ public:
|
||||
{
|
||||
}
|
||||
|
||||
SmallStringView(const std::string &string) noexcept
|
||||
template<typename String,
|
||||
typename Utils::enable_if_has_char_data_pointer<String> = 0>
|
||||
SmallStringView(const String &string) noexcept
|
||||
: m_pointer(string.data()),
|
||||
m_size(string.size())
|
||||
{
|
||||
|
Reference in New Issue
Block a user