1dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project/* 29857d99eecc389389da261a72461322d5cfb8eebMathias Agopian * Copyright 2005 The Android Open Source Project 3dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project * 49857d99eecc389389da261a72461322d5cfb8eebMathias Agopian * Licensed under the Apache License, Version 2.0 (the "License"); 59857d99eecc389389da261a72461322d5cfb8eebMathias Agopian * you may not use this file except in compliance with the License. 69857d99eecc389389da261a72461322d5cfb8eebMathias Agopian * You may obtain a copy of the License at 7dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project * 89857d99eecc389389da261a72461322d5cfb8eebMathias Agopian * http://www.apache.org/licenses/LICENSE-2.0 99857d99eecc389389da261a72461322d5cfb8eebMathias Agopian * 109857d99eecc389389da261a72461322d5cfb8eebMathias Agopian * Unless required by applicable law or agreed to in writing, software 119857d99eecc389389da261a72461322d5cfb8eebMathias Agopian * distributed under the License is distributed on an "AS IS" BASIS, 129857d99eecc389389da261a72461322d5cfb8eebMathias Agopian * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 139857d99eecc389389da261a72461322d5cfb8eebMathias Agopian * See the License for the specific language governing permissions and 149857d99eecc389389da261a72461322d5cfb8eebMathias Agopian * limitations under the License. 15dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project */ 16dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project 179857d99eecc389389da261a72461322d5cfb8eebMathias Agopian#ifndef ANDROID_PIXELFLINGER_VECTOR_H 189857d99eecc389389da261a72461322d5cfb8eebMathias Agopian#define ANDROID_PIXELFLINGER_VECTOR_H 19dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project 20dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project#include <new> 21dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project#include <stdint.h> 22dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project#include <sys/types.h> 23dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project 24dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project#include <cutils/log.h> 25dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project 269857d99eecc389389da261a72461322d5cfb8eebMathias Agopian#include "Errors.h" 279857d99eecc389389da261a72461322d5cfb8eebMathias Agopian#include "VectorImpl.h" 289857d99eecc389389da261a72461322d5cfb8eebMathias Agopian#include "TypeHelpers.h" 29dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project 30dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project// --------------------------------------------------------------------------- 31dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project 32dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Projectnamespace android { 339857d99eecc389389da261a72461322d5cfb8eebMathias Agopiannamespace tinyutils { 34dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project 35dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project/*! 36dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project * The main templated vector class ensuring type safety 37dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project * while making use of VectorImpl. 38dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project * This is the class users want to use. 39dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project */ 40dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project 41dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Projecttemplate <class TYPE> 42dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Projectclass Vector : private VectorImpl 43dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project{ 44dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Projectpublic: 45dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project typedef TYPE value_type; 46dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project 47dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project /*! 48dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project * Constructors and destructors 49dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project */ 50dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project 51dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project Vector(); 52dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project Vector(const Vector<TYPE>& rhs); 53dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project virtual ~Vector(); 54dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project 55dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project /*! copy operator */ 56dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project const Vector<TYPE>& operator = (const Vector<TYPE>& rhs) const; 57dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project Vector<TYPE>& operator = (const Vector<TYPE>& rhs); 58dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project 59dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project /* 60dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project * empty the vector 61dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project */ 62dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project 63dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project inline void clear() { VectorImpl::clear(); } 64dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project 65dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project /*! 66dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project * vector stats 67dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project */ 68dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project 69dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project //! returns number of items in the vector 70dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project inline size_t size() const { return VectorImpl::size(); } 71dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project //! returns wether or not the vector is empty 72dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project inline bool isEmpty() const { return VectorImpl::isEmpty(); } 73dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project //! returns how many items can be stored without reallocating the backing store 74dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project inline size_t capacity() const { return VectorImpl::capacity(); } 75dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project //! setst the capacity. capacity can never be reduced less than size() 76dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project inline ssize_t setCapacity(size_t size) { return VectorImpl::setCapacity(size); } 77dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project 78dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project /*! 79dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project * C-style array access 80dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project */ 81dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project 82dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project //! read-only C-style access 83dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project inline const TYPE* array() const; 84dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project //! read-write C-style access 85dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project TYPE* editArray(); 86dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project 87dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project /*! 88dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project * accessors 89dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project */ 90dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project 91dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project //! read-only access to an item at a given index 92dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project inline const TYPE& operator [] (size_t index) const; 93dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project //! alternate name for operator [] 94dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project inline const TYPE& itemAt(size_t index) const; 95dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project //! stack-usage of the vector. returns the top of the stack (last element) 96dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project const TYPE& top() const; 97dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project //! same as operator [], but allows to access the vector backward (from the end) with a negative index 98dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project const TYPE& mirrorItemAt(ssize_t index) const; 99dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project 100dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project /*! 101dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project * modifing the array 102dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project */ 103dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project 104dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project //! copy-on write support, grants write access to an item 105dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project TYPE& editItemAt(size_t index); 106dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project //! grants right acces to the top of the stack (last element) 107dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project TYPE& editTop(); 108dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project 109dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project /*! 110dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project * append/insert another vector 111dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project */ 112dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project 113dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project //! insert another vector at a given index 114dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project ssize_t insertVectorAt(const Vector<TYPE>& vector, size_t index); 115dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project 116dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project //! append another vector at the end of this one 117dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project ssize_t appendVector(const Vector<TYPE>& vector); 118dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project 119dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project 120dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project /*! 121dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project * add/insert/replace items 122dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project */ 123dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project 124dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project //! insert one or several items initialized with their default constructor 125dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project inline ssize_t insertAt(size_t index, size_t numItems = 1); 126dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project //! insert on onr several items initialized from a prototype item 127dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project ssize_t insertAt(const TYPE& prototype_item, size_t index, size_t numItems = 1); 128dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project //! pop the top of the stack (removes the last element). No-op if the stack's empty 129dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project inline void pop(); 130dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project //! pushes an item initialized with its default constructor 131dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project inline void push(); 132dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project //! pushes an item on the top of the stack 133dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project void push(const TYPE& item); 134dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project //! same as push() but returns the index the item was added at (or an error) 135dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project inline ssize_t add(); 136dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project //! same as push() but returns the index the item was added at (or an error) 137dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project ssize_t add(const TYPE& item); 138dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project //! replace an item with a new one initialized with its default constructor 139dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project inline ssize_t replaceAt(size_t index); 140dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project //! replace an item with a new one 141dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project ssize_t replaceAt(const TYPE& item, size_t index); 142dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project 143dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project /*! 144dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project * remove items 145dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project */ 146dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project 147dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project //! remove several items 148dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project inline ssize_t removeItemsAt(size_t index, size_t count = 1); 149dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project //! remove one item 150dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project inline ssize_t removeAt(size_t index) { return removeItemsAt(index); } 151dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project 152dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project /*! 153dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project * sort (stable) the array 154dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project */ 155dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project 156dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project typedef int (*compar_t)(const TYPE* lhs, const TYPE* rhs); 157dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project typedef int (*compar_r_t)(const TYPE* lhs, const TYPE* rhs, void* state); 158dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project 159dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project inline status_t sort(compar_t cmp); 160dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project inline status_t sort(compar_r_t cmp, void* state); 161dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project 162dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Projectprotected: 163dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project virtual void do_construct(void* storage, size_t num) const; 164dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project virtual void do_destroy(void* storage, size_t num) const; 165dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project virtual void do_copy(void* dest, const void* from, size_t num) const; 166dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project virtual void do_splat(void* dest, const void* item, size_t num) const; 167dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project virtual void do_move_forward(void* dest, const void* from, size_t num) const; 168dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project virtual void do_move_backward(void* dest, const void* from, size_t num) const; 169dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project}; 170dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project 171dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project 172dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project// --------------------------------------------------------------------------- 173dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project// No user serviceable parts from here... 174dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project// --------------------------------------------------------------------------- 175dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project 176dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Projecttemplate<class TYPE> inline 177dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source ProjectVector<TYPE>::Vector() 178dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project : VectorImpl(sizeof(TYPE), 179dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project ((traits<TYPE>::has_trivial_ctor ? HAS_TRIVIAL_CTOR : 0) 180dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project |(traits<TYPE>::has_trivial_dtor ? HAS_TRIVIAL_DTOR : 0) 181dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project |(traits<TYPE>::has_trivial_copy ? HAS_TRIVIAL_COPY : 0) 182dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project |(traits<TYPE>::has_trivial_assign ? HAS_TRIVIAL_ASSIGN : 0)) 183dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project ) 184dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project{ 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(const Vector<TYPE>& rhs) 189dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project : VectorImpl(rhs) { 190dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project} 191dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project 192dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Projecttemplate<class TYPE> inline 193dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source ProjectVector<TYPE>::~Vector() { 194dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project finish_vector(); 195dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project} 196dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project 197dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Projecttemplate<class TYPE> inline 198dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source ProjectVector<TYPE>& Vector<TYPE>::operator = (const Vector<TYPE>& rhs) { 199dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project VectorImpl::operator = (rhs); 200dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project return *this; 201dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project} 202dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project 203dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Projecttemplate<class TYPE> inline 204dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Projectconst Vector<TYPE>& Vector<TYPE>::operator = (const Vector<TYPE>& rhs) const { 205dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project VectorImpl::operator = (rhs); 206dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project return *this; 207dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project} 208dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project 209dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Projecttemplate<class TYPE> inline 210dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Projectconst TYPE* Vector<TYPE>::array() const { 211dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project return static_cast<const TYPE *>(arrayImpl()); 212dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project} 213dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project 214dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Projecttemplate<class TYPE> inline 215dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source ProjectTYPE* Vector<TYPE>::editArray() { 216dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project return static_cast<TYPE *>(editArrayImpl()); 217dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project} 218dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project 219dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project 220dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Projecttemplate<class TYPE> inline 221dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Projectconst TYPE& Vector<TYPE>::operator[](size_t index) const { 222dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project LOG_FATAL_IF( index>=size(), 223dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project "itemAt: index %d is past size %d", (int)index, (int)size() ); 224dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project return *(array() + index); 225dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project} 226dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project 227dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Projecttemplate<class TYPE> inline 228dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Projectconst TYPE& Vector<TYPE>::itemAt(size_t index) const { 229dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project return operator[](index); 230dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project} 231dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project 232dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Projecttemplate<class TYPE> inline 233dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Projectconst TYPE& Vector<TYPE>::mirrorItemAt(ssize_t index) const { 234dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project LOG_FATAL_IF( (index>0 ? index : -index)>=size(), 235dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project "mirrorItemAt: index %d is past size %d", 236dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project (int)index, (int)size() ); 237dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project return *(array() + ((index<0) ? (size()-index) : index)); 238dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project} 239dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project 240dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Projecttemplate<class TYPE> inline 241dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Projectconst TYPE& Vector<TYPE>::top() const { 242dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project return *(array() + size() - 1); 243dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project} 244dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project 245dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Projecttemplate<class TYPE> inline 246dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source ProjectTYPE& Vector<TYPE>::editItemAt(size_t index) { 247dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project return *( static_cast<TYPE *>(editItemLocation(index)) ); 248dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project} 249dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project 250dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Projecttemplate<class TYPE> inline 251dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source ProjectTYPE& Vector<TYPE>::editTop() { 252dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project return *( static_cast<TYPE *>(editItemLocation(size()-1)) ); 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>::insertVectorAt(const Vector<TYPE>& vector, size_t index) { 257dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project return VectorImpl::insertVectorAt(reinterpret_cast<const VectorImpl&>(vector), index); 258dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project} 259dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project 260dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Projecttemplate<class TYPE> inline 261dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Projectssize_t Vector<TYPE>::appendVector(const Vector<TYPE>& vector) { 262dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project return VectorImpl::appendVector(reinterpret_cast<const VectorImpl&>(vector)); 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>::insertAt(const TYPE& item, size_t index, size_t numItems) { 267dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project return VectorImpl::insertAt(&item, index, numItems); 268dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project} 269dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project 270dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Projecttemplate<class TYPE> inline 271dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Projectvoid Vector<TYPE>::push(const TYPE& item) { 272dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project return VectorImpl::push(&item); 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>::add(const TYPE& item) { 277dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project return VectorImpl::add(&item); 278dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project} 279dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project 280dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Projecttemplate<class TYPE> inline 281dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Projectssize_t Vector<TYPE>::replaceAt(const TYPE& item, size_t index) { 282dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project return VectorImpl::replaceAt(&item, index); 283dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project} 284dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project 285dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Projecttemplate<class TYPE> inline 286dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Projectssize_t Vector<TYPE>::insertAt(size_t index, size_t numItems) { 287dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project return VectorImpl::insertAt(index, numItems); 288dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project} 289dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project 290dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Projecttemplate<class TYPE> inline 291dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Projectvoid Vector<TYPE>::pop() { 292dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project VectorImpl::pop(); 293dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project} 294dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project 295dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Projecttemplate<class TYPE> inline 296dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Projectvoid Vector<TYPE>::push() { 297dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project VectorImpl::push(); 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>::add() { 302dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project return VectorImpl::add(); 303dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project} 304dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project 305dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Projecttemplate<class TYPE> inline 306dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Projectssize_t Vector<TYPE>::replaceAt(size_t index) { 307dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project return VectorImpl::replaceAt(index); 308dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project} 309dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project 310dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Projecttemplate<class TYPE> inline 311dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Projectssize_t Vector<TYPE>::removeItemsAt(size_t index, size_t count) { 312dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project return VectorImpl::removeItemsAt(index, count); 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 3479857d99eecc389389da261a72461322d5cfb8eebMathias Agopian} // namespace tinyutils 3489857d99eecc389389da261a72461322d5cfb8eebMathias Agopian} // namespace android 349dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project 350dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project 351dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project// --------------------------------------------------------------------------- 352dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project 3539857d99eecc389389da261a72461322d5cfb8eebMathias Agopian#endif // ANDROID_PIXELFLINGER_VECTOR_H 354