Qt containers: use std::move in take*() methods
Move the objects out of the data structure to avoid needless copies. Change-Id: I1a69fccc431e040b229d6ea9ded0e041c208c861 Reviewed-by: Olivier Goffart (Woboq GmbH) <ogoffart@woboq.com>
This commit is contained in:
parent
2ff0814aa2
commit
f437fb2934
@ -825,7 +825,7 @@ Q_OUTOFLINE_TEMPLATE T QHash<Key, T>::take(const Key &akey)
|
||||
|
||||
Node **node = findNode(akey);
|
||||
if (*node != e) {
|
||||
T t = (*node)->value;
|
||||
T t = std::move((*node)->value);
|
||||
Node *next = (*node)->next;
|
||||
deleteNode(*node);
|
||||
*node = next;
|
||||
|
@ -448,7 +448,7 @@ bool QLinkedList<T>::removeOne(const T &_t)
|
||||
template <typename T>
|
||||
inline T QLinkedList<T>::takeFirst()
|
||||
{
|
||||
T t = first();
|
||||
T t = std::move(first());
|
||||
removeFirst();
|
||||
return t;
|
||||
}
|
||||
@ -456,7 +456,7 @@ inline T QLinkedList<T>::takeFirst()
|
||||
template <typename T>
|
||||
inline T QLinkedList<T>::takeLast()
|
||||
{
|
||||
T t = last();
|
||||
T t = std::move(last());
|
||||
removeLast();
|
||||
return t;
|
||||
}
|
||||
|
@ -555,14 +555,14 @@ inline void QList<T>::removeAt(int i)
|
||||
template <typename T>
|
||||
inline T QList<T>::takeAt(int i)
|
||||
{ Q_ASSERT_X(i >= 0 && i < p.size(), "QList<T>::take", "index out of range");
|
||||
detach(); Node *n = reinterpret_cast<Node *>(p.at(i)); T t = n->t(); node_destruct(n);
|
||||
detach(); Node *n = reinterpret_cast<Node *>(p.at(i)); T t = std::move(n->t()); node_destruct(n);
|
||||
p.remove(i); return t; }
|
||||
template <typename T>
|
||||
inline T QList<T>::takeFirst()
|
||||
{ T t = first(); removeFirst(); return t; }
|
||||
{ T t = std::move(first()); removeFirst(); return t; }
|
||||
template <typename T>
|
||||
inline T QList<T>::takeLast()
|
||||
{ T t = last(); removeLast(); return t; }
|
||||
{ T t = std::move(last()); removeLast(); return t; }
|
||||
|
||||
template <typename T>
|
||||
Q_OUTOFLINE_TEMPLATE void QList<T>::reserve(int alloc)
|
||||
|
@ -956,7 +956,7 @@ Q_OUTOFLINE_TEMPLATE T QMap<Key, T>::take(const Key &akey)
|
||||
|
||||
Node *node = d->findNode(akey);
|
||||
if (node) {
|
||||
T t = node->value;
|
||||
T t = std::move(node->value);
|
||||
d->deleteNode(node);
|
||||
return t;
|
||||
}
|
||||
|
@ -147,8 +147,8 @@ public:
|
||||
void remove(int i, int n);
|
||||
inline void removeFirst() { Q_ASSERT(!isEmpty()); erase(d->begin()); }
|
||||
inline void removeLast();
|
||||
inline T takeFirst() { Q_ASSERT(!isEmpty()); T r = first(); removeFirst(); return r; }
|
||||
inline T takeLast() { Q_ASSERT(!isEmpty()); T r = last(); removeLast(); return r; }
|
||||
T takeFirst() { Q_ASSERT(!isEmpty()); T r = std::move(first()); removeFirst(); return r; }
|
||||
T takeLast() { Q_ASSERT(!isEmpty()); T r = std::move(last()); removeLast(); return r; }
|
||||
|
||||
QVector<T> &fill(const T &t, int size = -1);
|
||||
|
||||
@ -180,7 +180,7 @@ public:
|
||||
return true;
|
||||
}
|
||||
int length() const { return size(); }
|
||||
T takeAt(int i) { T t = at(i); remove(i); return t; }
|
||||
T takeAt(int i) { T t = std::move((*this)[i]); remove(i); return t; }
|
||||
void move(int from, int to)
|
||||
{
|
||||
Q_ASSERT_X(from >= 0 && from < size(), "QVector::move(int,int)", "'from' is out-of-range");
|
||||
|
Loading…
Reference in New Issue
Block a user