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:
Marco Bubke
2017-07-31 17:26:46 +02:00
parent 3b46c09520
commit 19e0159661
2 changed files with 26 additions and 21 deletions

View File

@@ -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

View File

@@ -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;