6 #ifndef SWIFT_MISC_SETBUILDER_H
7 #define SWIFT_MISC_SETBUILDER_H
16 #include <QStringList>
29 void insert(
const T &value) { m_list.push_back(value); }
30 void insert(T &&value) { m_list.push_back(std::move(value)); }
34 bool isEmpty()
const {
return m_list.isEmpty(); }
38 operator QList<T>() const & {
return sortAndDeduplicate(m_list); }
39 operator QList<T>() && {
return sortAndDeduplicate(std::move(m_list)); }
40 operator QSet<T>() const & {
return convertTo<QSet>(sortAndDeduplicate(m_list)); }
41 operator QSet<T>() && {
return convertTo<QSet>(sortAndDeduplicate(std::move(m_list))); }
42 operator std::set<T>() const & {
return convertTo<std::set>(sortAndDeduplicate(m_list)); }
43 operator std::set<T>() && {
return convertTo<std::set>(sortAndDeduplicate(std::move(m_list))); }
44 operator std::vector<T>() const & {
return convertTo<std::vector>(sortAndDeduplicate(m_list)); }
45 operator std::vector<T>() && {
return convertTo<std::vector>(sortAndDeduplicate(std::move(m_list))); }
46 template <
typename U = T,
typename = std::enable_if_t<std::is_same_v<U, QString>>>
47 operator QStringList() const &
49 return sortAndDeduplicate(m_list);
51 template <
typename U = T,
typename = std::enable_if_t<std::is_same_v<U, QString>>>
52 operator QStringList() &&
54 return sortAndDeduplicate(std::move(m_list));
61 static QList<T> sortAndDeduplicate(QList<T> list)
63 std::sort(list.begin(), list.end());
64 list.erase(std::unique(list.begin(), list.end()), list.end());
68 template <
template <
typename...>
class C>
69 static C<T> convertTo(QList<T> &&list)
71 return C<T>(std::make_move_iterator(list.begin()), std::make_move_iterator(list.end()));
Build a QSet more efficiently when calling insert() in a for loop.
bool isEmpty() const
True if no elements have been inserted.
void insert(T &&value)
Add an element to the set. Runs in amortized constant time.
void insert(const T &value)
Add an element to the set. Runs in amortized constant time.
Free functions in swift::misc.