Vector.h revision 69973992d531ae7df20916c6fb3034b08a6d53c4
1edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project/* 2edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project * Copyright (C) 2005 The Android Open Source Project 3edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project * 4edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License"); 5edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project * you may not use this file except in compliance with the License. 6edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project * You may obtain a copy of the License at 7edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project * 8edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project * http://www.apache.org/licenses/LICENSE-2.0 9edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project * 10edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project * Unless required by applicable law or agreed to in writing, software 11edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS, 12edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project * See the License for the specific language governing permissions and 14edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project * limitations under the License. 15edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project */ 16edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 17edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project#ifndef ANDROID_VECTOR_H 18edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project#define ANDROID_VECTOR_H 19edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 20edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project#include <new> 21edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project#include <stdint.h> 22edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project#include <sys/types.h> 23edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 2469973992d531ae7df20916c6fb3034b08a6d53c4Mathias Agopian#include <cutils/log.h> 2569973992d531ae7df20916c6fb3034b08a6d53c4Mathias Agopian 26edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project#include <utils/VectorImpl.h> 27edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project#include <utils/TypeHelpers.h> 28edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 29edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project// --------------------------------------------------------------------------- 30edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 31edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projectnamespace android { 32edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 33698c0873cf2e07bdc7fd1e72169aee2a19fa40d7Mathias Agopiantemplate <typename TYPE> 34698c0873cf2e07bdc7fd1e72169aee2a19fa40d7Mathias Agopianclass SortedVector; 35698c0873cf2e07bdc7fd1e72169aee2a19fa40d7Mathias Agopian 36edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project/*! 37edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project * The main templated vector class ensuring type safety 38edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project * while making use of VectorImpl. 39edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project * This is the class users want to use. 40edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project */ 41edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 42edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projecttemplate <class TYPE> 43edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projectclass Vector : private VectorImpl 44edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project{ 45edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projectpublic: 46edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project typedef TYPE value_type; 47edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 48edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project /*! 49edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project * Constructors and destructors 50edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project */ 51edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 52edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project Vector(); 53edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project Vector(const Vector<TYPE>& rhs); 54698c0873cf2e07bdc7fd1e72169aee2a19fa40d7Mathias Agopian explicit Vector(const SortedVector<TYPE>& rhs); 55edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project virtual ~Vector(); 56edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 57edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project /*! copy operator */ 58edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project const Vector<TYPE>& operator = (const Vector<TYPE>& rhs) const; 59edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project Vector<TYPE>& operator = (const Vector<TYPE>& rhs); 60edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 61698c0873cf2e07bdc7fd1e72169aee2a19fa40d7Mathias Agopian const Vector<TYPE>& operator = (const SortedVector<TYPE>& rhs) const; 62698c0873cf2e07bdc7fd1e72169aee2a19fa40d7Mathias Agopian Vector<TYPE>& operator = (const SortedVector<TYPE>& rhs); 63698c0873cf2e07bdc7fd1e72169aee2a19fa40d7Mathias Agopian 64698c0873cf2e07bdc7fd1e72169aee2a19fa40d7Mathias Agopian /* 65edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project * empty the vector 66edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project */ 67edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 68edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project inline void clear() { VectorImpl::clear(); } 69edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 70edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project /*! 71edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project * vector stats 72edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project */ 73edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 74edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project //! returns number of items in the vector 75edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project inline size_t size() const { return VectorImpl::size(); } 764fec873a98f7b4380720cd1ad006f74c8cdc73daMathias Agopian //! returns whether or not the vector is empty 77edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project inline bool isEmpty() const { return VectorImpl::isEmpty(); } 78edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project //! returns how many items can be stored without reallocating the backing store 79edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project inline size_t capacity() const { return VectorImpl::capacity(); } 804fec873a98f7b4380720cd1ad006f74c8cdc73daMathias Agopian //! sets the capacity. capacity can never be reduced less than size() 81edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project inline ssize_t setCapacity(size_t size) { return VectorImpl::setCapacity(size); } 82edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 83edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project /*! 84edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project * C-style array access 85edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project */ 86edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 87edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project //! read-only C-style access 88edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project inline const TYPE* array() const; 89edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project //! read-write C-style access 90edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project TYPE* editArray(); 91edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 92edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project /*! 93edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project * accessors 94edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project */ 95edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 96edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project //! read-only access to an item at a given index 97edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project inline const TYPE& operator [] (size_t index) const; 98edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project //! alternate name for operator [] 99edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project inline const TYPE& itemAt(size_t index) const; 100edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project //! stack-usage of the vector. returns the top of the stack (last element) 101edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project const TYPE& top() const; 102edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project //! same as operator [], but allows to access the vector backward (from the end) with a negative index 103edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project const TYPE& mirrorItemAt(ssize_t index) const; 104edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 105edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project /*! 1064fec873a98f7b4380720cd1ad006f74c8cdc73daMathias Agopian * modifying the array 107edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project */ 108edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 109edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project //! copy-on write support, grants write access to an item 110edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project TYPE& editItemAt(size_t index); 1114fec873a98f7b4380720cd1ad006f74c8cdc73daMathias Agopian //! grants right access to the top of the stack (last element) 112edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project TYPE& editTop(); 113edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 114edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project /*! 115edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project * append/insert another vector 116edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project */ 117edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 118edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project //! insert another vector at a given index 119edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project ssize_t insertVectorAt(const Vector<TYPE>& vector, size_t index); 120edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 121edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project //! append another vector at the end of this one 122edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project ssize_t appendVector(const Vector<TYPE>& vector); 123edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 124edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 125e839a589bf582568cf220c1040ed93b948e6e362Jeff Brown //! insert an array at a given index 126f4a4ec2063dfd28e04bbfe712f67acee4bdc8e37Jeff Brown ssize_t insertArrayAt(const TYPE* array, size_t index, size_t length); 127e839a589bf582568cf220c1040ed93b948e6e362Jeff Brown 128e839a589bf582568cf220c1040ed93b948e6e362Jeff Brown //! append an array at the end of this vector 129f4a4ec2063dfd28e04bbfe712f67acee4bdc8e37Jeff Brown ssize_t appendArray(const TYPE* array, size_t length); 130e839a589bf582568cf220c1040ed93b948e6e362Jeff Brown 131edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project /*! 132edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project * add/insert/replace items 133edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project */ 134edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 135edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project //! insert one or several items initialized with their default constructor 136edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project inline ssize_t insertAt(size_t index, size_t numItems = 1); 137f4a4ec2063dfd28e04bbfe712f67acee4bdc8e37Jeff Brown //! insert one or several items initialized from a prototype item 138edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project ssize_t insertAt(const TYPE& prototype_item, size_t index, size_t numItems = 1); 139edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project //! pop the top of the stack (removes the last element). No-op if the stack's empty 140edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project inline void pop(); 141edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project //! pushes an item initialized with its default constructor 142edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project inline void push(); 143edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project //! pushes an item on the top of the stack 144edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project void push(const TYPE& item); 145edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project //! same as push() but returns the index the item was added at (or an error) 146edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project inline ssize_t add(); 147edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project //! same as push() but returns the index the item was added at (or an error) 148edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project ssize_t add(const TYPE& item); 149edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project //! replace an item with a new one initialized with its default constructor 150edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project inline ssize_t replaceAt(size_t index); 151edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project //! replace an item with a new one 152edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project ssize_t replaceAt(const TYPE& item, size_t index); 153edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 154edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project /*! 155edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project * remove items 156edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project */ 157edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 158edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project //! remove several items 159edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project inline ssize_t removeItemsAt(size_t index, size_t count = 1); 160edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project //! remove one item 161edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project inline ssize_t removeAt(size_t index) { return removeItemsAt(index); } 162edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 163edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project /*! 164edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project * sort (stable) the array 165edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project */ 166edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 167edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project typedef int (*compar_t)(const TYPE* lhs, const TYPE* rhs); 168edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project typedef int (*compar_r_t)(const TYPE* lhs, const TYPE* rhs, void* state); 169edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 170edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project inline status_t sort(compar_t cmp); 171edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project inline status_t sort(compar_r_t cmp, void* state); 172edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 173d0b55c011a311b677493ba72804bf1bc4df68224Mathias Agopian // for debugging only 174d0b55c011a311b677493ba72804bf1bc4df68224Mathias Agopian inline size_t getItemSize() const { return itemSize(); } 175d0b55c011a311b677493ba72804bf1bc4df68224Mathias Agopian 176e60e1fd23d8d12fc46fd867c8bc837fc581ffa1dMathias Agopian 177e60e1fd23d8d12fc46fd867c8bc837fc581ffa1dMathias Agopian /* 178e60e1fd23d8d12fc46fd867c8bc837fc581ffa1dMathias Agopian * these inlines add some level of compatibility with STL. eventually 179e60e1fd23d8d12fc46fd867c8bc837fc581ffa1dMathias Agopian * we should probably turn things around. 180e60e1fd23d8d12fc46fd867c8bc837fc581ffa1dMathias Agopian */ 181e60e1fd23d8d12fc46fd867c8bc837fc581ffa1dMathias Agopian typedef TYPE* iterator; 182e60e1fd23d8d12fc46fd867c8bc837fc581ffa1dMathias Agopian typedef TYPE const* const_iterator; 183e60e1fd23d8d12fc46fd867c8bc837fc581ffa1dMathias Agopian 184e60e1fd23d8d12fc46fd867c8bc837fc581ffa1dMathias Agopian inline iterator begin() { return editArray(); } 185e60e1fd23d8d12fc46fd867c8bc837fc581ffa1dMathias Agopian inline iterator end() { return editArray() + size(); } 186e60e1fd23d8d12fc46fd867c8bc837fc581ffa1dMathias Agopian inline const_iterator begin() const { return array(); } 187e60e1fd23d8d12fc46fd867c8bc837fc581ffa1dMathias Agopian inline const_iterator end() const { return array() + size(); } 188e60e1fd23d8d12fc46fd867c8bc837fc581ffa1dMathias Agopian inline void reserve(size_t n) { setCapacity(n); } 189e60e1fd23d8d12fc46fd867c8bc837fc581ffa1dMathias Agopian inline bool empty() const{ return isEmpty(); } 190bc48ce68e6d17bbf78ac44645808a432110d9a37Andreas Huber inline void push_back(const TYPE& item) { insertAt(item, size(), 1); } 191bc48ce68e6d17bbf78ac44645808a432110d9a37Andreas Huber inline void push_front(const TYPE& item) { insertAt(item, 0, 1); } 192e60e1fd23d8d12fc46fd867c8bc837fc581ffa1dMathias Agopian inline iterator erase(iterator pos) { 193e60e1fd23d8d12fc46fd867c8bc837fc581ffa1dMathias Agopian return begin() + removeItemsAt(pos-array()); 194e60e1fd23d8d12fc46fd867c8bc837fc581ffa1dMathias Agopian } 195e60e1fd23d8d12fc46fd867c8bc837fc581ffa1dMathias Agopian 196edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projectprotected: 197edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project virtual void do_construct(void* storage, size_t num) const; 198edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project virtual void do_destroy(void* storage, size_t num) const; 199edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project virtual void do_copy(void* dest, const void* from, size_t num) const; 200edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project virtual void do_splat(void* dest, const void* item, size_t num) const; 201edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project virtual void do_move_forward(void* dest, const void* from, size_t num) const; 202edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project virtual void do_move_backward(void* dest, const void* from, size_t num) const; 203edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project}; 204edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 205e6d77c593d1a25b45c23bf9292ec7ee09fc14b6eJeff Brown// Vector<T> can be trivially moved using memcpy() because moving does not 206e6d77c593d1a25b45c23bf9292ec7ee09fc14b6eJeff Brown// require any change to the underlying SharedBuffer contents or reference count. 207e6d77c593d1a25b45c23bf9292ec7ee09fc14b6eJeff Browntemplate<typename T> struct trait_trivial_move<Vector<T> > { enum { value = true }; }; 208edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 209edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project// --------------------------------------------------------------------------- 210edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project// No user serviceable parts from here... 211edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project// --------------------------------------------------------------------------- 212edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 213edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projecttemplate<class TYPE> inline 214edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source ProjectVector<TYPE>::Vector() 215edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project : VectorImpl(sizeof(TYPE), 216edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project ((traits<TYPE>::has_trivial_ctor ? HAS_TRIVIAL_CTOR : 0) 217edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project |(traits<TYPE>::has_trivial_dtor ? HAS_TRIVIAL_DTOR : 0) 2185f28411a856e47f86e3b0c7c031a6c0e0fa1dba0Mathias Agopian |(traits<TYPE>::has_trivial_copy ? HAS_TRIVIAL_COPY : 0)) 219edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project ) 220edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project{ 221edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project} 222edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 223edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projecttemplate<class TYPE> inline 224edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source ProjectVector<TYPE>::Vector(const Vector<TYPE>& rhs) 225edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project : VectorImpl(rhs) { 226edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project} 227edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 228edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projecttemplate<class TYPE> inline 229698c0873cf2e07bdc7fd1e72169aee2a19fa40d7Mathias AgopianVector<TYPE>::Vector(const SortedVector<TYPE>& rhs) 230698c0873cf2e07bdc7fd1e72169aee2a19fa40d7Mathias Agopian : VectorImpl(static_cast<const VectorImpl&>(rhs)) { 231698c0873cf2e07bdc7fd1e72169aee2a19fa40d7Mathias Agopian} 232698c0873cf2e07bdc7fd1e72169aee2a19fa40d7Mathias Agopian 233698c0873cf2e07bdc7fd1e72169aee2a19fa40d7Mathias Agopiantemplate<class TYPE> inline 234edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source ProjectVector<TYPE>::~Vector() { 235edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project finish_vector(); 236edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project} 237edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 238edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projecttemplate<class TYPE> inline 239edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source ProjectVector<TYPE>& Vector<TYPE>::operator = (const Vector<TYPE>& rhs) { 240edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project VectorImpl::operator = (rhs); 241edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project return *this; 242edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project} 243edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 244edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projecttemplate<class TYPE> inline 245edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projectconst Vector<TYPE>& Vector<TYPE>::operator = (const Vector<TYPE>& rhs) const { 246698c0873cf2e07bdc7fd1e72169aee2a19fa40d7Mathias Agopian VectorImpl::operator = (static_cast<const VectorImpl&>(rhs)); 247698c0873cf2e07bdc7fd1e72169aee2a19fa40d7Mathias Agopian return *this; 248698c0873cf2e07bdc7fd1e72169aee2a19fa40d7Mathias Agopian} 249698c0873cf2e07bdc7fd1e72169aee2a19fa40d7Mathias Agopian 250698c0873cf2e07bdc7fd1e72169aee2a19fa40d7Mathias Agopiantemplate<class TYPE> inline 251698c0873cf2e07bdc7fd1e72169aee2a19fa40d7Mathias AgopianVector<TYPE>& Vector<TYPE>::operator = (const SortedVector<TYPE>& rhs) { 252698c0873cf2e07bdc7fd1e72169aee2a19fa40d7Mathias Agopian VectorImpl::operator = (static_cast<const VectorImpl&>(rhs)); 253698c0873cf2e07bdc7fd1e72169aee2a19fa40d7Mathias Agopian return *this; 254698c0873cf2e07bdc7fd1e72169aee2a19fa40d7Mathias Agopian} 255698c0873cf2e07bdc7fd1e72169aee2a19fa40d7Mathias Agopian 256698c0873cf2e07bdc7fd1e72169aee2a19fa40d7Mathias Agopiantemplate<class TYPE> inline 257698c0873cf2e07bdc7fd1e72169aee2a19fa40d7Mathias Agopianconst Vector<TYPE>& Vector<TYPE>::operator = (const SortedVector<TYPE>& rhs) const { 258edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project VectorImpl::operator = (rhs); 259edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project return *this; 260edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project} 261edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 262edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projecttemplate<class TYPE> inline 263edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projectconst TYPE* Vector<TYPE>::array() const { 264edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project return static_cast<const TYPE *>(arrayImpl()); 265edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project} 266edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 267edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projecttemplate<class TYPE> inline 268edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source ProjectTYPE* Vector<TYPE>::editArray() { 269edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project return static_cast<TYPE *>(editArrayImpl()); 270edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project} 271edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 272edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 273edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projecttemplate<class TYPE> inline 274edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projectconst TYPE& Vector<TYPE>::operator[](size_t index) const { 27569973992d531ae7df20916c6fb3034b08a6d53c4Mathias Agopian LOG_FATAL_IF(index>=size(), 27669973992d531ae7df20916c6fb3034b08a6d53c4Mathias Agopian "%s: index=%u out of range (%u)", __PRETTY_FUNCTION__, 27769973992d531ae7df20916c6fb3034b08a6d53c4Mathias Agopian int(index), int(size())); 278edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project return *(array() + index); 279edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project} 280edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 281edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projecttemplate<class TYPE> inline 282edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projectconst TYPE& Vector<TYPE>::itemAt(size_t index) const { 283edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project return operator[](index); 284edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project} 285edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 286edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projecttemplate<class TYPE> inline 287edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projectconst TYPE& Vector<TYPE>::mirrorItemAt(ssize_t index) const { 28869973992d531ae7df20916c6fb3034b08a6d53c4Mathias Agopian const size_t i = index>0 ? index : -index; 28969973992d531ae7df20916c6fb3034b08a6d53c4Mathias Agopian LOG_FATAL_IF(index>=size(), 29069973992d531ae7df20916c6fb3034b08a6d53c4Mathias Agopian "%s: index=%u out of range (%u)", __PRETTY_FUNCTION__, 29169973992d531ae7df20916c6fb3034b08a6d53c4Mathias Agopian int(index), int(size())); 29269973992d531ae7df20916c6fb3034b08a6d53c4Mathias Agopian return *(array() + i); 293edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project} 294edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 295edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projecttemplate<class TYPE> inline 296edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projectconst TYPE& Vector<TYPE>::top() const { 297edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project return *(array() + size() - 1); 298edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project} 299edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 300edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projecttemplate<class TYPE> inline 301edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source ProjectTYPE& Vector<TYPE>::editItemAt(size_t index) { 302edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project return *( static_cast<TYPE *>(editItemLocation(index)) ); 303edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project} 304edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 305edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projecttemplate<class TYPE> inline 306edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source ProjectTYPE& Vector<TYPE>::editTop() { 307edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project return *( static_cast<TYPE *>(editItemLocation(size()-1)) ); 308edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project} 309edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 310edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projecttemplate<class TYPE> inline 311edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projectssize_t Vector<TYPE>::insertVectorAt(const Vector<TYPE>& vector, size_t index) { 312edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project return VectorImpl::insertVectorAt(reinterpret_cast<const VectorImpl&>(vector), index); 313edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project} 314edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 315edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projecttemplate<class TYPE> inline 316edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projectssize_t Vector<TYPE>::appendVector(const Vector<TYPE>& vector) { 317edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project return VectorImpl::appendVector(reinterpret_cast<const VectorImpl&>(vector)); 318edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project} 319edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 320edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projecttemplate<class TYPE> inline 321f4a4ec2063dfd28e04bbfe712f67acee4bdc8e37Jeff Brownssize_t Vector<TYPE>::insertArrayAt(const TYPE* array, size_t index, size_t length) { 322f4a4ec2063dfd28e04bbfe712f67acee4bdc8e37Jeff Brown return VectorImpl::insertArrayAt(array, index, length); 323e839a589bf582568cf220c1040ed93b948e6e362Jeff Brown} 324e839a589bf582568cf220c1040ed93b948e6e362Jeff Brown 325e839a589bf582568cf220c1040ed93b948e6e362Jeff Browntemplate<class TYPE> inline 326f4a4ec2063dfd28e04bbfe712f67acee4bdc8e37Jeff Brownssize_t Vector<TYPE>::appendArray(const TYPE* array, size_t length) { 327f4a4ec2063dfd28e04bbfe712f67acee4bdc8e37Jeff Brown return VectorImpl::appendArray(array, length); 328e839a589bf582568cf220c1040ed93b948e6e362Jeff Brown} 329e839a589bf582568cf220c1040ed93b948e6e362Jeff Brown 330e839a589bf582568cf220c1040ed93b948e6e362Jeff Browntemplate<class TYPE> inline 331edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projectssize_t Vector<TYPE>::insertAt(const TYPE& item, size_t index, size_t numItems) { 332edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project return VectorImpl::insertAt(&item, index, numItems); 333edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project} 334edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 335edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projecttemplate<class TYPE> inline 336edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projectvoid Vector<TYPE>::push(const TYPE& item) { 337edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project return VectorImpl::push(&item); 338edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project} 339edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 340edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projecttemplate<class TYPE> inline 341edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projectssize_t Vector<TYPE>::add(const TYPE& item) { 342edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project return VectorImpl::add(&item); 343edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project} 344edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 345edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projecttemplate<class TYPE> inline 346edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projectssize_t Vector<TYPE>::replaceAt(const TYPE& item, size_t index) { 347edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project return VectorImpl::replaceAt(&item, index); 348edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project} 349edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 350edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projecttemplate<class TYPE> inline 351edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projectssize_t Vector<TYPE>::insertAt(size_t index, size_t numItems) { 352edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project return VectorImpl::insertAt(index, numItems); 353edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project} 354edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 355edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projecttemplate<class TYPE> inline 356edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projectvoid Vector<TYPE>::pop() { 357edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project VectorImpl::pop(); 358edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project} 359edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 360edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projecttemplate<class TYPE> inline 361edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projectvoid Vector<TYPE>::push() { 362edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project VectorImpl::push(); 363edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project} 364edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 365edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projecttemplate<class TYPE> inline 366edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projectssize_t Vector<TYPE>::add() { 367edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project return VectorImpl::add(); 368edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project} 369edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 370edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projecttemplate<class TYPE> inline 371edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projectssize_t Vector<TYPE>::replaceAt(size_t index) { 372edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project return VectorImpl::replaceAt(index); 373edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project} 374edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 375edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projecttemplate<class TYPE> inline 376edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projectssize_t Vector<TYPE>::removeItemsAt(size_t index, size_t count) { 377edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project return VectorImpl::removeItemsAt(index, count); 378edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project} 379edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 380edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projecttemplate<class TYPE> inline 381edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projectstatus_t Vector<TYPE>::sort(Vector<TYPE>::compar_t cmp) { 382edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project return VectorImpl::sort((VectorImpl::compar_t)cmp); 383edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project} 384edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 385edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projecttemplate<class TYPE> inline 386edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projectstatus_t Vector<TYPE>::sort(Vector<TYPE>::compar_r_t cmp, void* state) { 387edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project return VectorImpl::sort((VectorImpl::compar_r_t)cmp, state); 388edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project} 389edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 390edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project// --------------------------------------------------------------------------- 391edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 392edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projecttemplate<class TYPE> 393edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projectvoid Vector<TYPE>::do_construct(void* storage, size_t num) const { 394edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project construct_type( reinterpret_cast<TYPE*>(storage), num ); 395edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project} 396edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 397edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projecttemplate<class TYPE> 398edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projectvoid Vector<TYPE>::do_destroy(void* storage, size_t num) const { 399edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project destroy_type( reinterpret_cast<TYPE*>(storage), num ); 400edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project} 401edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 402edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projecttemplate<class TYPE> 403edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projectvoid Vector<TYPE>::do_copy(void* dest, const void* from, size_t num) const { 404edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project copy_type( reinterpret_cast<TYPE*>(dest), reinterpret_cast<const TYPE*>(from), num ); 405edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project} 406edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 407edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projecttemplate<class TYPE> 408edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projectvoid Vector<TYPE>::do_splat(void* dest, const void* item, size_t num) const { 409edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project splat_type( reinterpret_cast<TYPE*>(dest), reinterpret_cast<const TYPE*>(item), num ); 410edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project} 411edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 412edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projecttemplate<class TYPE> 413edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projectvoid Vector<TYPE>::do_move_forward(void* dest, const void* from, size_t num) const { 414edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project move_forward_type( reinterpret_cast<TYPE*>(dest), reinterpret_cast<const TYPE*>(from), num ); 415edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project} 416edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 417edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projecttemplate<class TYPE> 418edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projectvoid Vector<TYPE>::do_move_backward(void* dest, const void* from, size_t num) const { 419edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project move_backward_type( reinterpret_cast<TYPE*>(dest), reinterpret_cast<const TYPE*>(from), num ); 420edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project} 421edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 422edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project}; // namespace android 423edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 424edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 425edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project// --------------------------------------------------------------------------- 426edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 427edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project#endif // ANDROID_VECTOR_H 428