aboutsummaryrefslogtreecommitdiffstats
path: root/emulator/opengl/shared/emugl/common/pod_vector.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'emulator/opengl/shared/emugl/common/pod_vector.cpp')
-rw-r--r--emulator/opengl/shared/emugl/common/pod_vector.cpp150
1 files changed, 0 insertions, 150 deletions
diff --git a/emulator/opengl/shared/emugl/common/pod_vector.cpp b/emulator/opengl/shared/emugl/common/pod_vector.cpp
deleted file mode 100644
index c8ec3a6..0000000
--- a/emulator/opengl/shared/emugl/common/pod_vector.cpp
+++ /dev/null
@@ -1,150 +0,0 @@
-// Copyright (C) 2014 The Android Open Source Project
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-#include "emugl/common/pod_vector.h"
-
-#include <stdlib.h>
-#include <string.h>
-
-#define USE_MALLOC_USABLE_SIZE 0
-
-namespace emugl {
-
-static inline void swapPointers(char** p1, char** p2) {
- char* tmp = *p1;
- *p1 = *p2;
- *p2 = tmp;
-}
-
-PodVectorBase::PodVectorBase(const PodVectorBase& other) {
- initFrom(other.begin(), other.byteSize());
-}
-
-PodVectorBase& PodVectorBase::operator=(const PodVectorBase& other) {
- initFrom(other.begin(), other.byteSize());
- return *this;
-}
-
-PodVectorBase::~PodVectorBase() {
- if (mBegin) {
- // Sanity.
- ::memset(mBegin, 0xee, byteSize());
- ::free(mBegin);
- mBegin = NULL;
- mEnd = NULL;
- mLimit = NULL;
- }
-}
-
-void PodVectorBase::initFrom(const void* from, size_t fromLen) {
- if (!fromLen || !from) {
- mBegin = NULL;
- mEnd = NULL;
- mLimit = NULL;
- } else {
- mBegin = static_cast<char*>(::malloc(fromLen));
- mEnd = mLimit = mBegin + fromLen;
- ::memcpy(mBegin, from, fromLen);
- }
-}
-
-void PodVectorBase::assignFrom(const PodVectorBase& other) {
- resize(other.byteSize(), 1U);
- ::memmove(begin(), other.begin(), byteSize());
-}
-
-void PodVectorBase::resize(size_t newSize, size_t itemSize) {
- const size_t kMaxSize = maxItemCapacity(itemSize);
- size_t oldCapacity = itemCapacity(itemSize);
- const size_t kMinCapacity = 256 / itemSize;
-
- if (newSize < oldCapacity) {
- // Only shrink if the new size is really small.
- if (newSize < oldCapacity / 2 && oldCapacity > kMinCapacity) {
- reserve(newSize, itemSize);
- }
- } else if (newSize > oldCapacity) {
- size_t newCapacity = oldCapacity;
- while (newCapacity < newSize) {
- size_t newCapacity2 = newCapacity + (newCapacity >> 2) + 8;
- if (newCapacity2 < newCapacity || newCapacity > kMaxSize) {
- newCapacity = kMaxSize;
- } else {
- newCapacity = newCapacity2;
- }
- }
- reserve(newCapacity, itemSize);
- }
- mEnd = mBegin + newSize * itemSize;
-}
-
-void PodVectorBase::reserve(size_t newSize, size_t itemSize) {
- if (newSize == 0) {
- ::free(mBegin);
- mBegin = NULL;
- mEnd = NULL;
- mLimit = NULL;
- return;
- }
-
- size_t oldByteSize = byteSize();
- size_t newByteCapacity = newSize * itemSize;
- char* newBegin = static_cast<char*>(::realloc(mBegin, newByteCapacity));
- mBegin = newBegin;
- mEnd = newBegin + oldByteSize;
-#if USE_MALLOC_USABLE_SIZE
- size_t usableSize = malloc_usable_size(mBegin);
- if (usableSize > newByteCapacity) {
- newByteCapacity = usableSize - (usableSize % itemSize);
- }
-#endif
- mLimit = newBegin + newByteCapacity;
- // Sanity.
- if (newByteCapacity > oldByteSize) {
- ::memset(mBegin + oldByteSize, 0, newByteCapacity - oldByteSize);
- }
-}
-
-void PodVectorBase::removeAt(size_t itemPos, size_t itemSize) {
- size_t count = itemCount(itemSize);
- if (itemPos < count) {
- size_t pos = itemPos * itemSize;
- ::memmove(mBegin + pos,
- mBegin + pos + itemSize,
- byteSize() - pos - itemSize);
- resize(count - 1U, itemSize);
- }
-}
-
-void* PodVectorBase::insertAt(size_t itemPos, size_t itemSize) {
- size_t count = this->itemCount(itemSize);
- resize(count + 1, itemSize);
- size_t pos = itemPos * itemSize;
- if (itemPos < count) {
- ::memmove(mBegin + pos + itemSize,
- mBegin + pos,
- count * itemSize - pos);
- // Sanity to avoid copying pointers and other bad stuff.
- ::memset(mBegin + pos, 0, itemSize);
- }
- return mBegin + pos;
-}
-
-void PodVectorBase::swapAll(PodVectorBase* other) {
- swapPointers(&mBegin, &other->mBegin);
- swapPointers(&mEnd, &other->mEnd);
- swapPointers(&mLimit, &other->mLimit);
-}
-
-} // namespace emugl