diff options
author | Lars Knoll <lars.knoll@digia.com> | 2014-01-09 16:48:56 +0100 |
---|---|---|
committer | The Qt Project <gerrit-noreply@qt-project.org> | 2014-01-20 21:14:20 +0100 |
commit | 2ba2d245c152cdbb26f918bc4481c77b8004f3cd (patch) | |
tree | 19557bf1c50f9d702fcf2634885eff67ab2c01bc /src/qml/jsruntime/qv4sparsearray_p.h | |
parent | 683a3e456e29ffa15c439ef66609e8b729140eb8 (diff) |
Fixes to sparse array handling
deleting entries in sparse arrays could lead
to rather unexpected results where values got
moved to wrong indices, as we didn't correctly
update the size_left values in the red-black tree.
Change-Id: If71fcc04d39f257194394cb4f734d0db14b92b69
Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
Diffstat (limited to 'src/qml/jsruntime/qv4sparsearray_p.h')
-rw-r--r-- | src/qml/jsruntime/qv4sparsearray_p.h | 20 |
1 files changed, 11 insertions, 9 deletions
diff --git a/src/qml/jsruntime/qv4sparsearray_p.h b/src/qml/jsruntime/qv4sparsearray_p.h index 4746498963..f2ad167a17 100644 --- a/src/qml/jsruntime/qv4sparsearray_p.h +++ b/src/qml/jsruntime/qv4sparsearray_p.h @@ -49,6 +49,7 @@ #include "qv4property_p.h" #include <assert.h> +//#define Q_MAP_DEBUG #ifdef Q_MAP_DEBUG #include <QtCore/qdebug.h> #endif @@ -182,6 +183,8 @@ public: SparseArrayNode *findNode(uint akey) const; + uint nEntries() const { return numEntries; } + uint pop_front(); void push_front(uint at); uint pop_back(uint len); @@ -208,7 +211,7 @@ public: typedef qptrdiff difference_type; typedef int size_type; -#ifdef Q_MAP_DEBUG +#ifndef QT_NO_DEBUG void dump() const; #endif }; @@ -281,23 +284,22 @@ inline void SparseArray::push_back(uint index, uint len) n->value = index; } -#ifdef Q_MAP_DEBUG - -void SparseArray::dump() const +#ifndef QT_NO_DEBUG +inline void SparseArray::dump() const { - const_iterator it = begin(); + const SparseArrayNode *it = begin(); qDebug() << "map dump:"; while (it != end()) { - const SparseArrayNode *n = it.i; + const SparseArrayNode *n = it; int depth = 0; while (n && n != root()) { ++depth; n = n->parent(); } QByteArray space(4*depth, ' '); - qDebug() << space << (it.i->color() == SparseArrayNode::Red ? "Red " : "Black") << it.i << it.i->left << it.i->right - << it.key() << it.value(); - ++it; + qDebug() << space << (it->color() == SparseArrayNode::Red ? "Red " : "Black") << it << it->size_left << it->left << it->right + << it->key() << it->value; + it = it->nextNode(); } qDebug() << "---------"; } |