Vector.h revision 7c123375ffee76d6e15b611e8146c13bb67a8c9f
1cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project/* 2cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project * Copyright (C) 2005 The Android Open Source Project 3cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project * 4cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License"); 5cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project * you may not use this file except in compliance with the License. 6cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project * You may obtain a copy of the License at 7cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project * 8cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project * http://www.apache.org/licenses/LICENSE-2.0 9cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project * 10cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project * Unless required by applicable law or agreed to in writing, software 11cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS, 12cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project * See the License for the specific language governing permissions and 14cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project * limitations under the License. 15cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project */ 16cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project 17cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project#ifndef ANDROID_VECTOR_H 18cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project#define ANDROID_VECTOR_H 19cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project 20cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project#include <new> 21cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project#include <stdint.h> 22cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project#include <sys/types.h> 23cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project 24cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project#include <utils/Log.h> 25cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project#include <utils/VectorImpl.h> 26cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project#include <utils/TypeHelpers.h> 27cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project 28cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project// --------------------------------------------------------------------------- 29cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project 30cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Projectnamespace android { 31cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project 32cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project/*! 33cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project * The main templated vector class ensuring type safety 34cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project * while making use of VectorImpl. 35cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project * This is the class users want to use. 36cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project */ 37cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project 38cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Projecttemplate <class TYPE> 39cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Projectclass Vector : private VectorImpl 40cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project{ 41cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Projectpublic: 42cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project typedef TYPE value_type; 43cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project 44cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project /*! 45cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project * Constructors and destructors 46cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project */ 47cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project 48cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project Vector(); 49cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project Vector(const Vector<TYPE>& rhs); 50cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project virtual ~Vector(); 51cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project 52cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project /*! copy operator */ 53cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project const Vector<TYPE>& operator = (const Vector<TYPE>& rhs) const; 54cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project Vector<TYPE>& operator = (const Vector<TYPE>& rhs); 55cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project 56cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project /* 57cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project * empty the vector 58cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project */ 59cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project 60cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project inline void clear() { VectorImpl::clear(); } 61cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project 62cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project /*! 63cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project * vector stats 64cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project */ 65cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project 66cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project //! returns number of items in the vector 67cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project inline size_t size() const { return VectorImpl::size(); } 68cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project //! returns wether or not the vector is empty 69cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project inline bool isEmpty() const { return VectorImpl::isEmpty(); } 70cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project //! returns how many items can be stored without reallocating the backing store 71cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project inline size_t capacity() const { return VectorImpl::capacity(); } 72cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project //! setst the capacity. capacity can never be reduced less than size() 73cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project inline ssize_t setCapacity(size_t size) { return VectorImpl::setCapacity(size); } 74cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project 75cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project /*! 76cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project * C-style array access 77cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project */ 78cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project 79cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project //! read-only C-style access 80cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project inline const TYPE* array() const; 81cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project //! read-write C-style access 82cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project TYPE* editArray(); 83cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project 84cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project /*! 85cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project * accessors 86cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project */ 87cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project 88cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project //! read-only access to an item at a given index 89cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project inline const TYPE& operator [] (size_t index) const; 90cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project //! alternate name for operator [] 91cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project inline const TYPE& itemAt(size_t index) const; 92cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project //! stack-usage of the vector. returns the top of the stack (last element) 93cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project const TYPE& top() const; 94cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project //! same as operator [], but allows to access the vector backward (from the end) with a negative index 95cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project const TYPE& mirrorItemAt(ssize_t index) const; 96cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project 97cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project /*! 98cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project * modifing the array 99cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project */ 100cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project 101cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project //! copy-on write support, grants write access to an item 102cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project TYPE& editItemAt(size_t index); 103cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project //! grants right acces to the top of the stack (last element) 104cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project TYPE& editTop(); 105cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project 106cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project /*! 107cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project * append/insert another vector 108cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project */ 109cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project 110cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project //! insert another vector at a given index 111cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project ssize_t insertVectorAt(const Vector<TYPE>& vector, size_t index); 112cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project 113cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project //! append another vector at the end of this one 114cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project ssize_t appendVector(const Vector<TYPE>& vector); 115cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project 116cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project 11766db68948c83f1940fa66d76d28208b49bed7815Jeff Brown //! insert an array at a given index 1189efaaa43595307786dbf06760823c25cb16b1925Jeff Brown ssize_t insertArrayAt(const TYPE* array, size_t index, size_t length); 11966db68948c83f1940fa66d76d28208b49bed7815Jeff Brown 12066db68948c83f1940fa66d76d28208b49bed7815Jeff Brown //! append an array at the end of this vector 1219efaaa43595307786dbf06760823c25cb16b1925Jeff Brown ssize_t appendArray(const TYPE* array, size_t length); 12266db68948c83f1940fa66d76d28208b49bed7815Jeff Brown 123cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project /*! 124cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project * add/insert/replace items 125cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project */ 126cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project 127cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project //! insert one or several items initialized with their default constructor 128cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project inline ssize_t insertAt(size_t index, size_t numItems = 1); 1299efaaa43595307786dbf06760823c25cb16b1925Jeff Brown //! insert one or several items initialized from a prototype item 130cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project ssize_t insertAt(const TYPE& prototype_item, size_t index, size_t numItems = 1); 131cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project //! pop the top of the stack (removes the last element). No-op if the stack's empty 132cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project inline void pop(); 133cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project //! pushes an item initialized with its default constructor 134cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project inline void push(); 135cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project //! pushes an item on the top of the stack 136cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project void push(const TYPE& item); 137cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project //! same as push() but returns the index the item was added at (or an error) 138cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project inline ssize_t add(); 139cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project //! same as push() but returns the index the item was added at (or an error) 140cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project ssize_t add(const TYPE& item); 141cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project //! replace an item with a new one initialized with its default constructor 142cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project inline ssize_t replaceAt(size_t index); 143cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project //! replace an item with a new one 144cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project ssize_t replaceAt(const TYPE& item, size_t index); 145cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project 146cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project /*! 147cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project * remove items 148cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project */ 149cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project 150cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project //! remove several items 151cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project inline ssize_t removeItemsAt(size_t index, size_t count = 1); 152cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project //! remove one item 153cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project inline ssize_t removeAt(size_t index) { return removeItemsAt(index); } 154cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project 155cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project /*! 156cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project * sort (stable) the array 157cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project */ 158cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project 159cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project typedef int (*compar_t)(const TYPE* lhs, const TYPE* rhs); 160cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project typedef int (*compar_r_t)(const TYPE* lhs, const TYPE* rhs, void* state); 161cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project 162cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project inline status_t sort(compar_t cmp); 163cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project inline status_t sort(compar_r_t cmp, void* state); 164cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project 1657c123375ffee76d6e15b611e8146c13bb67a8c9fMathias Agopian // for debugging only 1667c123375ffee76d6e15b611e8146c13bb67a8c9fMathias Agopian inline size_t getItemSize() const { return itemSize(); } 1677c123375ffee76d6e15b611e8146c13bb67a8c9fMathias Agopian 168cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Projectprotected: 169cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project virtual void do_construct(void* storage, size_t num) const; 170cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project virtual void do_destroy(void* storage, size_t num) const; 171cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project virtual void do_copy(void* dest, const void* from, size_t num) const; 172cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project virtual void do_splat(void* dest, const void* item, size_t num) const; 173cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project virtual void do_move_forward(void* dest, const void* from, size_t num) const; 174cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project virtual void do_move_backward(void* dest, const void* from, size_t num) const; 175cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project}; 176cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project 177cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project 178cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project// --------------------------------------------------------------------------- 179cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project// No user serviceable parts from here... 180cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project// --------------------------------------------------------------------------- 181cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project 182cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Projecttemplate<class TYPE> inline 183cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source ProjectVector<TYPE>::Vector() 184cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project : VectorImpl(sizeof(TYPE), 185cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project ((traits<TYPE>::has_trivial_ctor ? HAS_TRIVIAL_CTOR : 0) 186cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project |(traits<TYPE>::has_trivial_dtor ? HAS_TRIVIAL_DTOR : 0) 187a33bd1672fab3ac2ca72f2921716bf860d500aa3Mathias Agopian |(traits<TYPE>::has_trivial_copy ? HAS_TRIVIAL_COPY : 0)) 188cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project ) 189cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project{ 190cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project} 191cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project 192cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Projecttemplate<class TYPE> inline 193cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source ProjectVector<TYPE>::Vector(const Vector<TYPE>& rhs) 194cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project : VectorImpl(rhs) { 195cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project} 196cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project 197cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Projecttemplate<class TYPE> inline 198cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source ProjectVector<TYPE>::~Vector() { 199cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project finish_vector(); 200cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project} 201cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project 202cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Projecttemplate<class TYPE> inline 203cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source ProjectVector<TYPE>& Vector<TYPE>::operator = (const Vector<TYPE>& rhs) { 204cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project VectorImpl::operator = (rhs); 205cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project return *this; 206cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project} 207cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project 208cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Projecttemplate<class TYPE> inline 209cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Projectconst Vector<TYPE>& Vector<TYPE>::operator = (const Vector<TYPE>& rhs) const { 210cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project VectorImpl::operator = (rhs); 211cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project return *this; 212cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project} 213cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project 214cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Projecttemplate<class TYPE> inline 215cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Projectconst TYPE* Vector<TYPE>::array() const { 216cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project return static_cast<const TYPE *>(arrayImpl()); 217cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project} 218cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project 219cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Projecttemplate<class TYPE> inline 220cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source ProjectTYPE* Vector<TYPE>::editArray() { 221cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project return static_cast<TYPE *>(editArrayImpl()); 222cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project} 223cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project 224cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project 225cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Projecttemplate<class TYPE> inline 226cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Projectconst TYPE& Vector<TYPE>::operator[](size_t index) const { 227cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project LOG_FATAL_IF( index>=size(), 228cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project "itemAt: index %d is past size %d", (int)index, (int)size() ); 229cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project return *(array() + index); 230cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project} 231cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project 232cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Projecttemplate<class TYPE> inline 233cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Projectconst TYPE& Vector<TYPE>::itemAt(size_t index) const { 234cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project return operator[](index); 235cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project} 236cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project 237cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Projecttemplate<class TYPE> inline 238cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Projectconst TYPE& Vector<TYPE>::mirrorItemAt(ssize_t index) const { 239cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project LOG_FATAL_IF( (index>0 ? index : -index)>=size(), 240cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project "mirrorItemAt: index %d is past size %d", 241cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project (int)index, (int)size() ); 242cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project return *(array() + ((index<0) ? (size()-index) : index)); 243cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project} 244cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project 245cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Projecttemplate<class TYPE> inline 246cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Projectconst TYPE& Vector<TYPE>::top() const { 247cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project return *(array() + size() - 1); 248cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project} 249cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project 250cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Projecttemplate<class TYPE> inline 251cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source ProjectTYPE& Vector<TYPE>::editItemAt(size_t index) { 252cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project return *( static_cast<TYPE *>(editItemLocation(index)) ); 253cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project} 254cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project 255cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Projecttemplate<class TYPE> inline 256cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source ProjectTYPE& Vector<TYPE>::editTop() { 257cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project return *( static_cast<TYPE *>(editItemLocation(size()-1)) ); 258cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project} 259cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project 260cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Projecttemplate<class TYPE> inline 261cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Projectssize_t Vector<TYPE>::insertVectorAt(const Vector<TYPE>& vector, size_t index) { 262cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project return VectorImpl::insertVectorAt(reinterpret_cast<const VectorImpl&>(vector), index); 263cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project} 264cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project 265cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Projecttemplate<class TYPE> inline 266cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Projectssize_t Vector<TYPE>::appendVector(const Vector<TYPE>& vector) { 267cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project return VectorImpl::appendVector(reinterpret_cast<const VectorImpl&>(vector)); 268cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project} 269cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project 270cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Projecttemplate<class TYPE> inline 2719efaaa43595307786dbf06760823c25cb16b1925Jeff Brownssize_t Vector<TYPE>::insertArrayAt(const TYPE* array, size_t index, size_t length) { 2729efaaa43595307786dbf06760823c25cb16b1925Jeff Brown return VectorImpl::insertArrayAt(array, index, length); 27366db68948c83f1940fa66d76d28208b49bed7815Jeff Brown} 27466db68948c83f1940fa66d76d28208b49bed7815Jeff Brown 27566db68948c83f1940fa66d76d28208b49bed7815Jeff Browntemplate<class TYPE> inline 2769efaaa43595307786dbf06760823c25cb16b1925Jeff Brownssize_t Vector<TYPE>::appendArray(const TYPE* array, size_t length) { 2779efaaa43595307786dbf06760823c25cb16b1925Jeff Brown return VectorImpl::appendArray(array, length); 27866db68948c83f1940fa66d76d28208b49bed7815Jeff Brown} 27966db68948c83f1940fa66d76d28208b49bed7815Jeff Brown 28066db68948c83f1940fa66d76d28208b49bed7815Jeff Browntemplate<class TYPE> inline 281cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Projectssize_t Vector<TYPE>::insertAt(const TYPE& item, size_t index, size_t numItems) { 282cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project return VectorImpl::insertAt(&item, index, numItems); 283cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project} 284cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project 285cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Projecttemplate<class TYPE> inline 286cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Projectvoid Vector<TYPE>::push(const TYPE& item) { 287cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project return VectorImpl::push(&item); 288cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project} 289cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project 290cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Projecttemplate<class TYPE> inline 291cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Projectssize_t Vector<TYPE>::add(const TYPE& item) { 292cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project return VectorImpl::add(&item); 293cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project} 294cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project 295cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Projecttemplate<class TYPE> inline 296cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Projectssize_t Vector<TYPE>::replaceAt(const TYPE& item, size_t index) { 297cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project return VectorImpl::replaceAt(&item, index); 298cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project} 299cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project 300cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Projecttemplate<class TYPE> inline 301cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Projectssize_t Vector<TYPE>::insertAt(size_t index, size_t numItems) { 302cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project return VectorImpl::insertAt(index, numItems); 303cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project} 304cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project 305cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Projecttemplate<class TYPE> inline 306cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Projectvoid Vector<TYPE>::pop() { 307cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project VectorImpl::pop(); 308cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project} 309cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project 310cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Projecttemplate<class TYPE> inline 311cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Projectvoid Vector<TYPE>::push() { 312cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project VectorImpl::push(); 313cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project} 314cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project 315cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Projecttemplate<class TYPE> inline 316cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Projectssize_t Vector<TYPE>::add() { 317cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project return VectorImpl::add(); 318cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project} 319cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project 320cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Projecttemplate<class TYPE> inline 321cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Projectssize_t Vector<TYPE>::replaceAt(size_t index) { 322cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project return VectorImpl::replaceAt(index); 323cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project} 324cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project 325cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Projecttemplate<class TYPE> inline 326cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Projectssize_t Vector<TYPE>::removeItemsAt(size_t index, size_t count) { 327cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project return VectorImpl::removeItemsAt(index, count); 328cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project} 329cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project 330cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Projecttemplate<class TYPE> inline 331cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Projectstatus_t Vector<TYPE>::sort(Vector<TYPE>::compar_t cmp) { 332cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project return VectorImpl::sort((VectorImpl::compar_t)cmp); 333cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project} 334cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project 335cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Projecttemplate<class TYPE> inline 336cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Projectstatus_t Vector<TYPE>::sort(Vector<TYPE>::compar_r_t cmp, void* state) { 337cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project return VectorImpl::sort((VectorImpl::compar_r_t)cmp, state); 338cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project} 339cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project 340cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project// --------------------------------------------------------------------------- 341cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project 342cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Projecttemplate<class TYPE> 343cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Projectvoid Vector<TYPE>::do_construct(void* storage, size_t num) const { 344cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project construct_type( reinterpret_cast<TYPE*>(storage), num ); 345cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project} 346cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project 347cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Projecttemplate<class TYPE> 348cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Projectvoid Vector<TYPE>::do_destroy(void* storage, size_t num) const { 349cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project destroy_type( reinterpret_cast<TYPE*>(storage), num ); 350cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project} 351cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project 352cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Projecttemplate<class TYPE> 353cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Projectvoid Vector<TYPE>::do_copy(void* dest, const void* from, size_t num) const { 354cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project copy_type( reinterpret_cast<TYPE*>(dest), reinterpret_cast<const TYPE*>(from), num ); 355cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project} 356cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project 357cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Projecttemplate<class TYPE> 358cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Projectvoid Vector<TYPE>::do_splat(void* dest, const void* item, size_t num) const { 359cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project splat_type( reinterpret_cast<TYPE*>(dest), reinterpret_cast<const TYPE*>(item), num ); 360cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project} 361cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project 362cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Projecttemplate<class TYPE> 363cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Projectvoid Vector<TYPE>::do_move_forward(void* dest, const void* from, size_t num) const { 364cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project move_forward_type( reinterpret_cast<TYPE*>(dest), reinterpret_cast<const TYPE*>(from), num ); 365cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project} 366cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project 367cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Projecttemplate<class TYPE> 368cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Projectvoid Vector<TYPE>::do_move_backward(void* dest, const void* from, size_t num) const { 369cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project move_backward_type( reinterpret_cast<TYPE*>(dest), reinterpret_cast<const TYPE*>(from), num ); 370cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project} 371cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project 372cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project}; // namespace android 373cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project 374cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project 375cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project// --------------------------------------------------------------------------- 376cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project 377cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project#endif // ANDROID_VECTOR_H 378