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))
|
: BasicSmallString(BasicSmallString::fromQString(qString))
|
||||||
{}
|
{}
|
||||||
|
|
||||||
template<typename Type,
|
BasicSmallString(const QByteArray &qByteArray)
|
||||||
typename = std::enable_if_t<std::is_same<std::decay_t<Type>, std::string>::value>
|
: BasicSmallString(qByteArray.constData(), qByteArray.size())
|
||||||
>
|
|
||||||
BasicSmallString(Type &&string)
|
|
||||||
: BasicSmallString(string.data(), string.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,
|
template<typename BeginIterator,
|
||||||
typename EndIterator,
|
typename EndIterator,
|
||||||
typename = std::enable_if_t<std::is_same<BeginIterator, EndIterator>::value>
|
typename = std::enable_if_t<std::is_same<BeginIterator, EndIterator>::value>
|
||||||
|
@@ -34,6 +34,18 @@
|
|||||||
|
|
||||||
namespace Utils {
|
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
|
class SmallStringView
|
||||||
{
|
{
|
||||||
public:
|
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_pointer(string.data()),
|
||||||
m_size(string.size())
|
m_size(string.size())
|
||||||
{
|
{
|
||||||
|
Reference in New Issue
Block a user