summaryrefslogtreecommitdiffstats
path: root/src/corelib/tools
diff options
context:
space:
mode:
authorQt Continuous Integration System <qt-info@nokia.com>2011-08-31 01:46:11 (GMT)
committerQt Continuous Integration System <qt-info@nokia.com>2011-08-31 01:46:11 (GMT)
commit1e48d40597bbe12321a5a3e42b3595dc17a7f8e7 (patch)
tree16bc5824f55124f1be742cc5c3f55f94e223fee1 /src/corelib/tools
parentc57195dc899ca732083487ed069ef813c340c0b5 (diff)
parente95de30977291a251660f72baa84b5ff244711fb (diff)
downloadQt-1e48d40597bbe12321a5a3e42b3595dc17a7f8e7.zip
Qt-1e48d40597bbe12321a5a3e42b3595dc17a7f8e7.tar.gz
Qt-1e48d40597bbe12321a5a3e42b3595dc17a7f8e7.tar.bz2
Merge branch 'master' of scm.dev.nokia.troll.no:qt/oslo-staging-1 into master-integration
* 'master' of scm.dev.nokia.troll.no:qt/oslo-staging-1: don't crash when destroying the shortcuts Disable activeqt on win32-g++ (it doesn't build). fix warning remove unused functions Make the DBus timeout configurable in QDBusAbstractInterface. Fix a typo in qt-conf docs. Revert "Fix build with the Clang compiler" Added missing no_include_pwd check Replace 'i < len-1 && func(i+1)' by 'i+1 < len && func(i+1)' Fix build with the Clang compiler Change spacing of title in offline style. Add support for rawFonts loaded from data in FaceId examples: fix compilation with namespaced Qt. Russian translation update Update Japanese translations for Qt 4.8. directfb: Include directfbgl.h directly tests: fix QNetworkProxyFactory test don't detach until the list is going to be modified optimize QList::removeAll()
Diffstat (limited to 'src/corelib/tools')
-rw-r--r--src/corelib/tools/qlist.h31
1 files changed, 19 insertions, 12 deletions
diff --git a/src/corelib/tools/qlist.h b/src/corelib/tools/qlist.h
index 4eb05d6..9f7b23f 100644
--- a/src/corelib/tools/qlist.h
+++ b/src/corelib/tools/qlist.h
@@ -769,25 +769,32 @@ Q_OUTOFLINE_TEMPLATE void QList<T>::clear()
template <typename T>
Q_OUTOFLINE_TEMPLATE int QList<T>::removeAll(const T &_t)
{
- detachShared();
+ int index = indexOf(_t);
+ if (index == -1)
+ return 0;
+
const T t = _t;
- int removedCount=0, i=0;
- Node *n;
- while (i < p.size())
- if ((n = reinterpret_cast<Node *>(p.at(i)))->t() == t) {
- node_destruct(n);
- p.remove(i);
- ++removedCount;
- } else {
- ++i;
- }
+ detach();
+
+ Node *i = reinterpret_cast<Node *>(p.at(index));
+ Node *e = reinterpret_cast<Node *>(p.end());
+ Node *n = i;
+ node_destruct(i);
+ while (++i != e) {
+ if (i->t() == t)
+ node_destruct(i);
+ else
+ *n++ = *i;
+ }
+
+ int removedCount = e - n;
+ d->end -= removedCount;
return removedCount;
}
template <typename T>
Q_OUTOFLINE_TEMPLATE bool QList<T>::removeOne(const T &_t)
{
- detachShared();
int index = indexOf(_t);
if (index != -1) {
removeAt(index);