diff options
author | Edward Welbourne <edward.welbourne@qt.io> | 2018-09-20 13:36:05 +0200 |
---|---|---|
committer | Edward Welbourne <edward.welbourne@qt.io> | 2018-10-08 14:11:08 +0000 |
commit | ff7f09d18708119bebb94202d3a3dcb26149ee5a (patch) | |
tree | aa15d57cd1fdb9eed9776db38360ab0b4e59cb64 /src/corelib/serialization/qcborarray.cpp | |
parent | 7f079bf9d0f534fcec747f965565d99845df7aba (diff) |
Change QCborArray to pad with invalid on inserting past end
Likewise have mutating operator[] insert an invalid entry at its
target index, if beyond the end of the array. This makes it possible
to fill an array from high index to low, for example.
Change-Id: If71699c20e2623142214ce2c11c4d6e4a120c989
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
Diffstat (limited to 'src/corelib/serialization/qcborarray.cpp')
-rw-r--r-- | src/corelib/serialization/qcborarray.cpp | 26 |
1 files changed, 17 insertions, 9 deletions
diff --git a/src/corelib/serialization/qcborarray.cpp b/src/corelib/serialization/qcborarray.cpp index 921fcf2fca..c56536cdb1 100644 --- a/src/corelib/serialization/qcborarray.cpp +++ b/src/corelib/serialization/qcborarray.cpp @@ -297,7 +297,8 @@ QCborValue QCborArray::at(qsizetype i) const \fn QCborValueRef QCborArray::operator[](qsizetype i) Returns a reference to the QCborValue element at position \a i in the - array. The array must have at least \a i elements. + array. Indices beyond the end of the array will grow the array, filling + with undefined entries, until it has an entry at the specified index. QCborValueRef has the exact same API as \l QCborValue, with one important difference: if you assign new values to it, this map will be updated with @@ -311,27 +312,34 @@ QCborValue QCborArray::at(qsizetype i) const \fn void QCborArray::insert(qsizetype i, const QCborValue &value) \fn void QCborArray::insert(qsizetype i, QCborValue &&value) - Inserts \a value into the array at position \a i in this array. The array - must have at least \a i elements before the insertion. + Inserts \a value into the array at position \a i in this array. If \a i is + -1, the entry is appended to the array. Pads the array with invalid entries + if \a i is greater than the prior size of the array. \sa at(), operator[](), first(), last(), prepend(), append(), removeAt(), takeAt(), extract() */ void QCborArray::insert(qsizetype i, const QCborValue &value) { - Q_ASSERT(size_t(i) <= size_t(size()) || i == -1); - if (i < 0) + if (i < 0) { + Q_ASSERT(i == -1); i = size(); - detach(qMax(i + 1, size())); + detach(i + 1); + } else { + d = QCborContainerPrivate::grow(d.data(), i); // detaches + } d->insertAt(i, value); } void QCborArray::insert(qsizetype i, QCborValue &&value) { - Q_ASSERT(size_t(i) <= size_t(size()) || i == -1); - if (i < 0) + if (i < 0) { + Q_ASSERT(i == -1); i = size(); - detach(qMax(i + 1, size())); + detach(i + 1); + } else { + d = QCborContainerPrivate::grow(d.data(), i); // detaches + } d->insertAt(i, value, QCborContainerPrivate::MoveContainer); QCborContainerPrivate::resetValue(value); } |