forked from qt-creator/qt-creator
Utils: Improve string vector for string view usage
Some times it makes sense to have a Utils::StringViewVector instead of a Utils::SmallStringVector because you don't want to hold the ownership. Change-Id: I5ae39efe21aebbf82d4b3effa9e67eae6727ba8b Reviewed-by: Tim Jenssen <tim.jenssen@qt.io>
This commit is contained in:
@@ -113,8 +113,8 @@ void PrintTo(const BasicSmallString<Size> &string, ::std::ostream *os)
|
|||||||
*os<< "'";
|
*os<< "'";
|
||||||
}
|
}
|
||||||
|
|
||||||
template <uint Size>
|
template <typename String>
|
||||||
QDataStream &operator<<(QDataStream &out, const BasicSmallStringVector<Size> &stringVector)
|
QDataStream &operator<<(QDataStream &out, const BasicSmallStringVector<String> &stringVector)
|
||||||
{
|
{
|
||||||
out << quint64(stringVector.size());
|
out << quint64(stringVector.size());
|
||||||
|
|
||||||
@@ -124,8 +124,8 @@ QDataStream &operator<<(QDataStream &out, const BasicSmallStringVector<Size> &s
|
|||||||
return out;
|
return out;
|
||||||
}
|
}
|
||||||
|
|
||||||
template <uint Size>
|
template <typename String>
|
||||||
QDataStream &operator>>(QDataStream &in, BasicSmallStringVector<Size> &stringVector)
|
QDataStream &operator>>(QDataStream &in, BasicSmallStringVector<String> &stringVector)
|
||||||
{
|
{
|
||||||
stringVector.clear();
|
stringVector.clear();
|
||||||
|
|
||||||
@@ -136,7 +136,7 @@ QDataStream &operator>>(QDataStream &in, BasicSmallStringVector<Size> &stringVe
|
|||||||
stringVector.reserve(size);
|
stringVector.reserve(size);
|
||||||
|
|
||||||
for (quint64 i = 0; i < size; ++i) {
|
for (quint64 i = 0; i < size; ++i) {
|
||||||
BasicSmallString<Size> string;
|
String string;
|
||||||
|
|
||||||
in >> string;
|
in >> string;
|
||||||
|
|
||||||
@@ -146,18 +146,18 @@ QDataStream &operator>>(QDataStream &in, BasicSmallStringVector<Size> &stringVe
|
|||||||
return in;
|
return in;
|
||||||
}
|
}
|
||||||
|
|
||||||
template <uint Size>
|
template <typename String>
|
||||||
QDebug operator<<(QDebug debug, const BasicSmallStringVector<Size> &stringVector)
|
QDebug operator<<(QDebug debug, const BasicSmallStringVector<String> &stringVector)
|
||||||
{
|
{
|
||||||
debug << "StringVector(" << stringVector.join(BasicSmallString<Size>(", ")).constData() << ")";
|
debug << "StringVector(" << stringVector.join(", ").constData() << ")";
|
||||||
|
|
||||||
return debug;
|
return debug;
|
||||||
}
|
}
|
||||||
|
|
||||||
template <uint Size>
|
template <typename String>
|
||||||
void PrintTo(const BasicSmallStringVector<Size> &textVector, ::std::ostream* os)
|
void PrintTo(const BasicSmallStringVector<String> &textVector, ::std::ostream* os)
|
||||||
{
|
{
|
||||||
*os << "[" << textVector.join(BasicSmallString<Size>(", ")).constData() << "]";
|
*os << "[" << textVector.join(", ").constData() << "]";
|
||||||
}
|
}
|
||||||
|
|
||||||
} // namespace Utils
|
} // namespace Utils
|
||||||
|
|||||||
@@ -35,25 +35,27 @@
|
|||||||
|
|
||||||
namespace Utils {
|
namespace Utils {
|
||||||
|
|
||||||
template<uint SmallStringSize>
|
template<typename String>
|
||||||
class BasicSmallStringVector : public std::vector<BasicSmallString<SmallStringSize>>
|
class BasicSmallStringVector : public std::vector<String>
|
||||||
{
|
{
|
||||||
using SmallString = BasicSmallString<SmallStringSize>;
|
using Base = std::vector<String>;
|
||||||
using Base = std::vector<SmallString>;
|
|
||||||
public:
|
public:
|
||||||
BasicSmallStringVector() = default;
|
BasicSmallStringVector() = default;
|
||||||
|
|
||||||
|
using Base::Base;
|
||||||
|
|
||||||
explicit BasicSmallStringVector(const Base &stringVector)
|
explicit BasicSmallStringVector(const Base &stringVector)
|
||||||
: Base(stringVector.begin(), stringVector.end())
|
: Base(stringVector.begin(), stringVector.end())
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
BasicSmallStringVector(std::initializer_list<SmallString> list)
|
BasicSmallStringVector(std::initializer_list<String> list)
|
||||||
{
|
{
|
||||||
Base::reserve(list.size());
|
Base::reserve(list.size());
|
||||||
|
|
||||||
for (auto &&entry : list)
|
for (auto &&entry : list)
|
||||||
Base::push_back(entry.clone());
|
Base::push_back(std::move(entry));
|
||||||
}
|
}
|
||||||
|
|
||||||
explicit BasicSmallStringVector(const QStringList &stringList)
|
explicit BasicSmallStringVector(const QStringList &stringList)
|
||||||
@@ -79,7 +81,7 @@ public:
|
|||||||
BasicSmallStringVector &operator=(BasicSmallStringVector &&)
|
BasicSmallStringVector &operator=(BasicSmallStringVector &&)
|
||||||
noexcept(std::is_nothrow_move_assignable<Base>::value) = default;
|
noexcept(std::is_nothrow_move_assignable<Base>::value) = default;
|
||||||
|
|
||||||
SmallString join(SmallString &&separator) const
|
SmallString join(SmallStringView separator) const
|
||||||
{
|
{
|
||||||
SmallString joinedString;
|
SmallString joinedString;
|
||||||
|
|
||||||
@@ -110,7 +112,7 @@ public:
|
|||||||
return hasEntry;
|
return hasEntry;
|
||||||
}
|
}
|
||||||
|
|
||||||
void append(SmallString &&string)
|
void append(String &&string)
|
||||||
{
|
{
|
||||||
push_back(std::move(string));
|
push_back(std::move(string));
|
||||||
}
|
}
|
||||||
@@ -153,6 +155,9 @@ private:
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
using SmallStringVector = BasicSmallStringVector<31>;
|
|
||||||
using PathStringVector = BasicSmallStringVector<190>;
|
|
||||||
|
using SmallStringVector = BasicSmallStringVector<BasicSmallString<31>>;
|
||||||
|
using PathStringVector = BasicSmallStringVector<BasicSmallString<190>>;
|
||||||
|
using StringViewVector = BasicSmallStringVector<SmallStringView>;
|
||||||
} // namespace Utils;
|
} // namespace Utils;
|
||||||
|
|||||||
Reference in New Issue
Block a user