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