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

@@ -35,25 +35,27 @@
namespace Utils {
template<uint SmallStringSize>
class BasicSmallStringVector : public std::vector<BasicSmallString<SmallStringSize>>
template<typename String>
class BasicSmallStringVector : public std::vector<String>
{
using SmallString = BasicSmallString<SmallStringSize>;
using Base = std::vector<SmallString>;
using Base = std::vector<String>;
public:
BasicSmallStringVector() = default;
using Base::Base;
explicit BasicSmallStringVector(const Base &stringVector)
: Base(stringVector.begin(), stringVector.end())
{
}
BasicSmallStringVector(std::initializer_list<SmallString> list)
BasicSmallStringVector(std::initializer_list<String> list)
{
Base::reserve(list.size());
for (auto &&entry : list)
Base::push_back(entry.clone());
Base::push_back(std::move(entry));
}
explicit BasicSmallStringVector(const QStringList &stringList)
@@ -79,7 +81,7 @@ public:
BasicSmallStringVector &operator=(BasicSmallStringVector &&)
noexcept(std::is_nothrow_move_assignable<Base>::value) = default;
SmallString join(SmallString &&separator) const
SmallString join(SmallStringView separator) const
{
SmallString joinedString;
@@ -110,7 +112,7 @@ public:
return hasEntry;
}
void append(SmallString &&string)
void append(String &&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;