QVarLengthArray: add squeeze function
Add function to move back data to the stack. Change-Id: Ic78a368459bce68629e29602e4eeae2e1afe398b Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
This commit is contained in:
parent
ff31462e73
commit
70a9caf4de
@ -103,6 +103,7 @@ public:
|
|||||||
inline bool isEmpty() const { return (s == 0); }
|
inline bool isEmpty() const { return (s == 0); }
|
||||||
inline void resize(int size);
|
inline void resize(int size);
|
||||||
inline void clear() { resize(0); }
|
inline void clear() { resize(0); }
|
||||||
|
inline void squeeze();
|
||||||
|
|
||||||
inline int capacity() const { return a; }
|
inline int capacity() const { return a; }
|
||||||
inline void reserve(int size);
|
inline void reserve(int size);
|
||||||
@ -243,6 +244,10 @@ Q_OUTOFLINE_TEMPLATE void QVarLengthArray<T, Prealloc>::append(const T *abuf, in
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
template <class T, int Prealloc>
|
||||||
|
Q_INLINE_TEMPLATE void QVarLengthArray<T, Prealloc>::squeeze()
|
||||||
|
{ realloc(s, s); }
|
||||||
|
|
||||||
template <class T, int Prealloc>
|
template <class T, int Prealloc>
|
||||||
Q_OUTOFLINE_TEMPLATE void QVarLengthArray<T, Prealloc>::realloc(int asize, int aalloc)
|
Q_OUTOFLINE_TEMPLATE void QVarLengthArray<T, Prealloc>::realloc(int asize, int aalloc)
|
||||||
{
|
{
|
||||||
|
@ -210,7 +210,7 @@
|
|||||||
initialized. For other types, the elements are initialized with a
|
initialized. For other types, the elements are initialized with a
|
||||||
\l{default-constructed value}.
|
\l{default-constructed value}.
|
||||||
|
|
||||||
\sa size()
|
\sa size(), squeeze()
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/*! \fn int QVarLengthArray::capacity() const
|
/*! \fn int QVarLengthArray::capacity() const
|
||||||
@ -223,7 +223,7 @@
|
|||||||
need to call this function. If you want to know how many items are
|
need to call this function. If you want to know how many items are
|
||||||
in the array, call size().
|
in the array, call size().
|
||||||
|
|
||||||
\sa reserve()
|
\sa reserve(), squeeze()
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/*! \fn void QVarLengthArray::reserve(int size)
|
/*! \fn void QVarLengthArray::reserve(int size)
|
||||||
@ -240,7 +240,21 @@
|
|||||||
rarely ever need to call this function. If you want to change the
|
rarely ever need to call this function. If you want to change the
|
||||||
size of the array, call resize().
|
size of the array, call resize().
|
||||||
|
|
||||||
\sa capacity()
|
\sa capacity(), squeeze()
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*! \fn void QVarLengthArray::squeeze()
|
||||||
|
\since 5.1
|
||||||
|
|
||||||
|
Releases any memory not required to store the items.
|
||||||
|
If the container can fit its storage on the stack allocation,
|
||||||
|
it will free the heap allocation and copy the elements back to the stack.
|
||||||
|
|
||||||
|
The sole purpose of this function is to provide a means of fine
|
||||||
|
tuning QVarLengthArray's memory usage. In general, you will rarely ever
|
||||||
|
need to call this function.
|
||||||
|
|
||||||
|
\sa reserve(), capacity(), resize()
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/*! \fn T &QVarLengthArray::operator[](int i)
|
/*! \fn T &QVarLengthArray::operator[](int i)
|
||||||
|
@ -58,6 +58,7 @@ private slots:
|
|||||||
void count();
|
void count();
|
||||||
void first();
|
void first();
|
||||||
void last();
|
void last();
|
||||||
|
void squeeze();
|
||||||
};
|
};
|
||||||
|
|
||||||
int fooCtor = 0;
|
int fooCtor = 0;
|
||||||
@ -653,5 +654,28 @@ void tst_QVarLengthArray::last()
|
|||||||
QCOMPARE(list.length(), 1);
|
QCOMPARE(list.length(), 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void tst_QVarLengthArray::squeeze()
|
||||||
|
{
|
||||||
|
QVarLengthArray<int> list;
|
||||||
|
int sizeOnStack = list.capacity();
|
||||||
|
int sizeOnHeap = sizeOnStack * 2;
|
||||||
|
list.resize(0);
|
||||||
|
QCOMPARE(list.capacity(), sizeOnStack);
|
||||||
|
list.resize(sizeOnHeap);
|
||||||
|
QCOMPARE(list.capacity(), sizeOnHeap);
|
||||||
|
list.resize(sizeOnStack);
|
||||||
|
QCOMPARE(list.capacity(), sizeOnHeap);
|
||||||
|
list.resize(0);
|
||||||
|
QCOMPARE(list.capacity(), sizeOnHeap);
|
||||||
|
list.squeeze();
|
||||||
|
QCOMPARE(list.capacity(), sizeOnStack);
|
||||||
|
list.resize(sizeOnStack);
|
||||||
|
list.squeeze();
|
||||||
|
QCOMPARE(list.capacity(), sizeOnStack);
|
||||||
|
list.resize(sizeOnHeap);
|
||||||
|
list.squeeze();
|
||||||
|
QCOMPARE(list.capacity(), sizeOnHeap);
|
||||||
|
}
|
||||||
|
|
||||||
QTEST_APPLESS_MAIN(tst_QVarLengthArray)
|
QTEST_APPLESS_MAIN(tst_QVarLengthArray)
|
||||||
#include "tst_qvarlengtharray.moc"
|
#include "tst_qvarlengtharray.moc"
|
||||||
|
Loading…
x
Reference in New Issue
Block a user