summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJesse Hall <jessehall@google.com>2013-03-11 10:16:48 -0700
committerJesse Hall <jessehall@google.com>2013-03-15 12:40:39 -0700
commite81421e1cbd14876b7e6ce143ff70efb3673be99 (patch)
treeb12c65c0251db6d3c4e7361bc423161be412b181
parent1791eefd69e07a7d8a311ee8a298bbd2de77f046 (diff)
downloadframeworks_native-e81421e1cbd14876b7e6ce143ff70efb3673be99.zip
frameworks_native-e81421e1cbd14876b7e6ce143ff70efb3673be99.tar.gz
frameworks_native-e81421e1cbd14876b7e6ce143ff70efb3673be99.tar.bz2
Add Vector::resize()
Bug: 8384764 Change-Id: Icee83d389f3e555eba7d419b64c8d52a9aa21b8b
-rw-r--r--include/utils/Vector.h8
-rw-r--r--include/utils/VectorImpl.h1
-rw-r--r--libs/utils/VectorImpl.cpp10
3 files changed, 18 insertions, 1 deletions
diff --git a/include/utils/Vector.h b/include/utils/Vector.h
index f3020d6..ed7b725 100644
--- a/include/utils/Vector.h
+++ b/include/utils/Vector.h
@@ -80,7 +80,13 @@ public:
//! sets the capacity. capacity can never be reduced less than size()
inline ssize_t setCapacity(size_t size) { return VectorImpl::setCapacity(size); }
- /*!
+ /*!
+ * set the size of the vector. items are appended with the default
+ * constructor, or removed from the end as needed.
+ */
+ inline ssize_t resize(size_t size) { return VectorImpl::resize(size); }
+
+ /*!
* C-style array access
*/
diff --git a/include/utils/VectorImpl.h b/include/utils/VectorImpl.h
index c4ec2ff..9bc50e6 100644
--- a/include/utils/VectorImpl.h
+++ b/include/utils/VectorImpl.h
@@ -64,6 +64,7 @@ public:
inline bool isEmpty() const { return mCount == 0; }
size_t capacity() const;
ssize_t setCapacity(size_t size);
+ ssize_t resize(size_t size);
/*! append/insert another vector or array */
ssize_t insertVectorAt(const VectorImpl& vector, size_t index);
diff --git a/libs/utils/VectorImpl.cpp b/libs/utils/VectorImpl.cpp
index c3257bb..70f49de 100644
--- a/libs/utils/VectorImpl.cpp
+++ b/libs/utils/VectorImpl.cpp
@@ -343,6 +343,16 @@ ssize_t VectorImpl::setCapacity(size_t new_capacity)
return new_capacity;
}
+ssize_t VectorImpl::resize(size_t size) {
+ ssize_t result = NO_ERROR;
+ if (size > mCount) {
+ result = insertAt(mCount, size - mCount);
+ } else if (size < mCount) {
+ result = removeItemsAt(size, mCount - size);
+ }
+ return result < 0 ? result : size;
+}
+
void VectorImpl::release_storage()
{
if (mStorage) {