1cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project/* 2cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project * Copyright (C) 2005 The Android Open Source Project 3cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project * 4cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License"); 5cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project * you may not use this file except in compliance with the License. 6cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project * You may obtain a copy of the License at 7cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project * 8cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project * http://www.apache.org/licenses/LICENSE-2.0 9cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project * 10cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project * Unless required by applicable law or agreed to in writing, software 11cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS, 12cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project * See the License for the specific language governing permissions and 14cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project * limitations under the License. 15cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project */ 16cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project 17cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project#ifndef ANDROID_VECTOR_H 18cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project#define ANDROID_VECTOR_H 19cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project 20cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project#include <stdint.h> 21cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project#include <sys/types.h> 22cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project 23cfd5b080af8de527d768f0ff7902c26af8d49307Mark Salyzyn#include <log/log.h> 24cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project#include <utils/TypeHelpers.h> 2566ce3e08c5632a20ea66bde6dd76397041edf034Mark Salyzyn#include <utils/VectorImpl.h> 26cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project 2727a7aa0f59cc1af578eecb5565504b341363b8b9Vishwath Mohan/* 2827a7aa0f59cc1af578eecb5565504b341363b8b9Vishwath Mohan * Used to blacklist some functions from CFI. 2927a7aa0f59cc1af578eecb5565504b341363b8b9Vishwath Mohan * 3027a7aa0f59cc1af578eecb5565504b341363b8b9Vishwath Mohan */ 3127a7aa0f59cc1af578eecb5565504b341363b8b9Vishwath Mohan#ifndef __has_attribute 3227a7aa0f59cc1af578eecb5565504b341363b8b9Vishwath Mohan#define __has_attribute(x) 0 3327a7aa0f59cc1af578eecb5565504b341363b8b9Vishwath Mohan#endif 3427a7aa0f59cc1af578eecb5565504b341363b8b9Vishwath Mohan 3527a7aa0f59cc1af578eecb5565504b341363b8b9Vishwath Mohan#if __has_attribute(no_sanitize) 3627a7aa0f59cc1af578eecb5565504b341363b8b9Vishwath Mohan#define UTILS_VECTOR_NO_CFI __attribute__((no_sanitize("cfi"))) 3727a7aa0f59cc1af578eecb5565504b341363b8b9Vishwath Mohan#else 3827a7aa0f59cc1af578eecb5565504b341363b8b9Vishwath Mohan#define UTILS_VECTOR_NO_CFI 3927a7aa0f59cc1af578eecb5565504b341363b8b9Vishwath Mohan#endif 4027a7aa0f59cc1af578eecb5565504b341363b8b9Vishwath Mohan 41cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project// --------------------------------------------------------------------------- 42cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project 43cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Projectnamespace android { 44cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project 45320a2b410329998a60d754171e06f872aa9c0467Mathias Agopiantemplate <typename TYPE> 46320a2b410329998a60d754171e06f872aa9c0467Mathias Agopianclass SortedVector; 47320a2b410329998a60d754171e06f872aa9c0467Mathias Agopian 48cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project/*! 49cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project * The main templated vector class ensuring type safety 50cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project * while making use of VectorImpl. 51cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project * This is the class users want to use. 52b8f152d3e2b9368717743ebcb1277239a6c00659Steven Moreland * 53b8f152d3e2b9368717743ebcb1277239a6c00659Steven Moreland * DO NOT USE: please use std::vector 54cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project */ 55cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project 56cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Projecttemplate <class TYPE> 57cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Projectclass Vector : private VectorImpl 58cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project{ 59cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Projectpublic: 60cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project typedef TYPE value_type; 61fc3f57acbb11455bc917f9e622c526c01c3843ffVishwath Mohan 62fc3f57acbb11455bc917f9e622c526c01c3843ffVishwath Mohan /*! 63cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project * Constructors and destructors 64cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project */ 65fc3f57acbb11455bc917f9e622c526c01c3843ffVishwath Mohan 66cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project Vector(); 67cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project Vector(const Vector<TYPE>& rhs); 68320a2b410329998a60d754171e06f872aa9c0467Mathias Agopian explicit Vector(const SortedVector<TYPE>& rhs); 69cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project virtual ~Vector(); 70cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project 71cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project /*! copy operator */ 72cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project const Vector<TYPE>& operator = (const Vector<TYPE>& rhs) const; 73fc3f57acbb11455bc917f9e622c526c01c3843ffVishwath Mohan Vector<TYPE>& operator = (const Vector<TYPE>& rhs); 74cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project 75320a2b410329998a60d754171e06f872aa9c0467Mathias Agopian const Vector<TYPE>& operator = (const SortedVector<TYPE>& rhs) const; 76320a2b410329998a60d754171e06f872aa9c0467Mathias Agopian Vector<TYPE>& operator = (const SortedVector<TYPE>& rhs); 77320a2b410329998a60d754171e06f872aa9c0467Mathias Agopian 78320a2b410329998a60d754171e06f872aa9c0467Mathias Agopian /* 79cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project * empty the vector 80cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project */ 81cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project 82cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project inline void clear() { VectorImpl::clear(); } 83cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project 84fc3f57acbb11455bc917f9e622c526c01c3843ffVishwath Mohan /*! 85cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project * vector stats 86cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project */ 87cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project 88cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project //! returns number of items in the vector 89cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project inline size_t size() const { return VectorImpl::size(); } 90e6bee12f943a5b6e7c596220dd02d5837322d09fMathias Agopian //! returns whether or not the vector is empty 91cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project inline bool isEmpty() const { return VectorImpl::isEmpty(); } 92cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project //! returns how many items can be stored without reallocating the backing store 93cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project inline size_t capacity() const { return VectorImpl::capacity(); } 94e6bee12f943a5b6e7c596220dd02d5837322d09fMathias Agopian //! sets the capacity. capacity can never be reduced less than size() 95cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project inline ssize_t setCapacity(size_t size) { return VectorImpl::setCapacity(size); } 96cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project 97b73559d86c9017166da28e1d59a884f13417426dJesse Hall /*! 98b73559d86c9017166da28e1d59a884f13417426dJesse Hall * set the size of the vector. items are appended with the default 99b73559d86c9017166da28e1d59a884f13417426dJesse Hall * constructor, or removed from the end as needed. 100b73559d86c9017166da28e1d59a884f13417426dJesse Hall */ 101b73559d86c9017166da28e1d59a884f13417426dJesse Hall inline ssize_t resize(size_t size) { return VectorImpl::resize(size); } 102b73559d86c9017166da28e1d59a884f13417426dJesse Hall 103b73559d86c9017166da28e1d59a884f13417426dJesse Hall /*! 104cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project * C-style array access 105cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project */ 106fc3f57acbb11455bc917f9e622c526c01c3843ffVishwath Mohan 107fc3f57acbb11455bc917f9e622c526c01c3843ffVishwath Mohan //! read-only C-style access 108cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project inline const TYPE* array() const; 109cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project //! read-write C-style access 110cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project TYPE* editArray(); 111fc3f57acbb11455bc917f9e622c526c01c3843ffVishwath Mohan 112fc3f57acbb11455bc917f9e622c526c01c3843ffVishwath Mohan /*! 113cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project * accessors 114cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project */ 115cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project 116cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project //! read-only access to an item at a given index 117cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project inline const TYPE& operator [] (size_t index) const; 118cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project //! alternate name for operator [] 119cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project inline const TYPE& itemAt(size_t index) const; 120cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project //! stack-usage of the vector. returns the top of the stack (last element) 121cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project const TYPE& top() const; 122cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project 123cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project /*! 124e6bee12f943a5b6e7c596220dd02d5837322d09fMathias Agopian * modifying the array 125cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project */ 126cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project 127cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project //! copy-on write support, grants write access to an item 128cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project TYPE& editItemAt(size_t index); 129e6bee12f943a5b6e7c596220dd02d5837322d09fMathias Agopian //! grants right access to the top of the stack (last element) 130cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project TYPE& editTop(); 131cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project 132fc3f57acbb11455bc917f9e622c526c01c3843ffVishwath Mohan /*! 133cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project * append/insert another vector 134cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project */ 135fc3f57acbb11455bc917f9e622c526c01c3843ffVishwath Mohan 136cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project //! insert another vector at a given index 137cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project ssize_t insertVectorAt(const Vector<TYPE>& vector, size_t index); 138cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project 139cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project //! append another vector at the end of this one 140cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project ssize_t appendVector(const Vector<TYPE>& vector); 141cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project 142cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project 14366db68948c83f1940fa66d76d28208b49bed7815Jeff Brown //! insert an array at a given index 1449efaaa43595307786dbf06760823c25cb16b1925Jeff Brown ssize_t insertArrayAt(const TYPE* array, size_t index, size_t length); 14566db68948c83f1940fa66d76d28208b49bed7815Jeff Brown 14666db68948c83f1940fa66d76d28208b49bed7815Jeff Brown //! append an array at the end of this vector 1479efaaa43595307786dbf06760823c25cb16b1925Jeff Brown ssize_t appendArray(const TYPE* array, size_t length); 14866db68948c83f1940fa66d76d28208b49bed7815Jeff Brown 149fc3f57acbb11455bc917f9e622c526c01c3843ffVishwath Mohan /*! 150cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project * add/insert/replace items 151cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project */ 152fc3f57acbb11455bc917f9e622c526c01c3843ffVishwath Mohan 153cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project //! insert one or several items initialized with their default constructor 154cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project inline ssize_t insertAt(size_t index, size_t numItems = 1); 1559efaaa43595307786dbf06760823c25cb16b1925Jeff Brown //! insert one or several items initialized from a prototype item 156cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project ssize_t insertAt(const TYPE& prototype_item, size_t index, size_t numItems = 1); 157cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project //! pop the top of the stack (removes the last element). No-op if the stack's empty 158cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project inline void pop(); 159cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project //! pushes an item initialized with its default constructor 160cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project inline void push(); 161cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project //! pushes an item on the top of the stack 162cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project void push(const TYPE& item); 163cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project //! same as push() but returns the index the item was added at (or an error) 164cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project inline ssize_t add(); 165cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project //! same as push() but returns the index the item was added at (or an error) 166fc3f57acbb11455bc917f9e622c526c01c3843ffVishwath Mohan ssize_t add(const TYPE& item); 167cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project //! replace an item with a new one initialized with its default constructor 168cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project inline ssize_t replaceAt(size_t index); 169cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project //! replace an item with a new one 170cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project ssize_t replaceAt(const TYPE& item, size_t index); 171cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project 172cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project /*! 173cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project * remove items 174cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project */ 175cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project 176cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project //! remove several items 177cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project inline ssize_t removeItemsAt(size_t index, size_t count = 1); 178cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project //! remove one item 179cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project inline ssize_t removeAt(size_t index) { return removeItemsAt(index); } 180cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project 181cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project /*! 182cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project * sort (stable) the array 183cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project */ 184fc3f57acbb11455bc917f9e622c526c01c3843ffVishwath Mohan 185cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project typedef int (*compar_t)(const TYPE* lhs, const TYPE* rhs); 186cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project typedef int (*compar_r_t)(const TYPE* lhs, const TYPE* rhs, void* state); 187fc3f57acbb11455bc917f9e622c526c01c3843ffVishwath Mohan 188cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project inline status_t sort(compar_t cmp); 189cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project inline status_t sort(compar_r_t cmp, void* state); 190cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project 1917c123375ffee76d6e15b611e8146c13bb67a8c9fMathias Agopian // for debugging only 1927c123375ffee76d6e15b611e8146c13bb67a8c9fMathias Agopian inline size_t getItemSize() const { return itemSize(); } 1937c123375ffee76d6e15b611e8146c13bb67a8c9fMathias Agopian 194bc55d727f3c7a5c95cc7a458ea8309bcff29919bMathias Agopian 195bc55d727f3c7a5c95cc7a458ea8309bcff29919bMathias Agopian /* 196bc55d727f3c7a5c95cc7a458ea8309bcff29919bMathias Agopian * these inlines add some level of compatibility with STL. eventually 197bc55d727f3c7a5c95cc7a458ea8309bcff29919bMathias Agopian * we should probably turn things around. 198bc55d727f3c7a5c95cc7a458ea8309bcff29919bMathias Agopian */ 199bc55d727f3c7a5c95cc7a458ea8309bcff29919bMathias Agopian typedef TYPE* iterator; 200bc55d727f3c7a5c95cc7a458ea8309bcff29919bMathias Agopian typedef TYPE const* const_iterator; 201bc55d727f3c7a5c95cc7a458ea8309bcff29919bMathias Agopian 202bc55d727f3c7a5c95cc7a458ea8309bcff29919bMathias Agopian inline iterator begin() { return editArray(); } 203bc55d727f3c7a5c95cc7a458ea8309bcff29919bMathias Agopian inline iterator end() { return editArray() + size(); } 204bc55d727f3c7a5c95cc7a458ea8309bcff29919bMathias Agopian inline const_iterator begin() const { return array(); } 205bc55d727f3c7a5c95cc7a458ea8309bcff29919bMathias Agopian inline const_iterator end() const { return array() + size(); } 206bc55d727f3c7a5c95cc7a458ea8309bcff29919bMathias Agopian inline void reserve(size_t n) { setCapacity(n); } 207bc55d727f3c7a5c95cc7a458ea8309bcff29919bMathias Agopian inline bool empty() const{ return isEmpty(); } 208f03fd0a87057558110019e80676279ef69859804Andreas Huber inline void push_back(const TYPE& item) { insertAt(item, size(), 1); } 209f03fd0a87057558110019e80676279ef69859804Andreas Huber inline void push_front(const TYPE& item) { insertAt(item, 0, 1); } 210bc55d727f3c7a5c95cc7a458ea8309bcff29919bMathias Agopian inline iterator erase(iterator pos) { 2111811d156e9c6b5486d25090ec3e911632dc6edffColin Cross ssize_t index = removeItemsAt(static_cast<size_t>(pos-array())); 21261db1669f491b221411269f62bd1cb458a543181Jason Simmons return begin() + index; 213bc55d727f3c7a5c95cc7a458ea8309bcff29919bMathias Agopian } 214bc55d727f3c7a5c95cc7a458ea8309bcff29919bMathias Agopian 215cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Projectprotected: 216cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project virtual void do_construct(void* storage, size_t num) const; 217cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project virtual void do_destroy(void* storage, size_t num) const; 218cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project virtual void do_copy(void* dest, const void* from, size_t num) const; 219cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project virtual void do_splat(void* dest, const void* item, size_t num) const; 220cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project virtual void do_move_forward(void* dest, const void* from, size_t num) const; 221cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project virtual void do_move_backward(void* dest, const void* from, size_t num) const; 222cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project}; 223cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project 224cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project// --------------------------------------------------------------------------- 225cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project// No user serviceable parts from here... 226cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project// --------------------------------------------------------------------------- 227cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project 228cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Projecttemplate<class TYPE> inline 229cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source ProjectVector<TYPE>::Vector() 230cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project : VectorImpl(sizeof(TYPE), 231cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project ((traits<TYPE>::has_trivial_ctor ? HAS_TRIVIAL_CTOR : 0) 232cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project |(traits<TYPE>::has_trivial_dtor ? HAS_TRIVIAL_DTOR : 0) 233a33bd1672fab3ac2ca72f2921716bf860d500aa3Mathias Agopian |(traits<TYPE>::has_trivial_copy ? HAS_TRIVIAL_COPY : 0)) 234cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project ) 235cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project{ 236cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project} 237cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project 238cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Projecttemplate<class TYPE> inline 239cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source ProjectVector<TYPE>::Vector(const Vector<TYPE>& rhs) 240cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project : VectorImpl(rhs) { 241cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project} 242cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project 243cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Projecttemplate<class TYPE> inline 244320a2b410329998a60d754171e06f872aa9c0467Mathias AgopianVector<TYPE>::Vector(const SortedVector<TYPE>& rhs) 245320a2b410329998a60d754171e06f872aa9c0467Mathias Agopian : VectorImpl(static_cast<const VectorImpl&>(rhs)) { 246320a2b410329998a60d754171e06f872aa9c0467Mathias Agopian} 247320a2b410329998a60d754171e06f872aa9c0467Mathias Agopian 248320a2b410329998a60d754171e06f872aa9c0467Mathias Agopiantemplate<class TYPE> inline 249cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source ProjectVector<TYPE>::~Vector() { 250cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project finish_vector(); 251cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project} 252cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project 253cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Projecttemplate<class TYPE> inline 254cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source ProjectVector<TYPE>& Vector<TYPE>::operator = (const Vector<TYPE>& rhs) { 255cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project VectorImpl::operator = (rhs); 256fc3f57acbb11455bc917f9e622c526c01c3843ffVishwath Mohan return *this; 257cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project} 258cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project 259cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Projecttemplate<class TYPE> inline 260cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Projectconst Vector<TYPE>& Vector<TYPE>::operator = (const Vector<TYPE>& rhs) const { 261320a2b410329998a60d754171e06f872aa9c0467Mathias Agopian VectorImpl::operator = (static_cast<const VectorImpl&>(rhs)); 262320a2b410329998a60d754171e06f872aa9c0467Mathias Agopian return *this; 263320a2b410329998a60d754171e06f872aa9c0467Mathias Agopian} 264320a2b410329998a60d754171e06f872aa9c0467Mathias Agopian 265320a2b410329998a60d754171e06f872aa9c0467Mathias Agopiantemplate<class TYPE> inline 266320a2b410329998a60d754171e06f872aa9c0467Mathias AgopianVector<TYPE>& Vector<TYPE>::operator = (const SortedVector<TYPE>& rhs) { 267320a2b410329998a60d754171e06f872aa9c0467Mathias Agopian VectorImpl::operator = (static_cast<const VectorImpl&>(rhs)); 268320a2b410329998a60d754171e06f872aa9c0467Mathias Agopian return *this; 269320a2b410329998a60d754171e06f872aa9c0467Mathias Agopian} 270320a2b410329998a60d754171e06f872aa9c0467Mathias Agopian 271320a2b410329998a60d754171e06f872aa9c0467Mathias Agopiantemplate<class TYPE> inline 272320a2b410329998a60d754171e06f872aa9c0467Mathias Agopianconst Vector<TYPE>& Vector<TYPE>::operator = (const SortedVector<TYPE>& rhs) const { 273cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project VectorImpl::operator = (rhs); 274fc3f57acbb11455bc917f9e622c526c01c3843ffVishwath Mohan return *this; 275cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project} 276cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project 277cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Projecttemplate<class TYPE> inline 278cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Projectconst TYPE* Vector<TYPE>::array() const { 279cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project return static_cast<const TYPE *>(arrayImpl()); 280cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project} 281cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project 282cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Projecttemplate<class TYPE> inline 283cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source ProjectTYPE* Vector<TYPE>::editArray() { 284cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project return static_cast<TYPE *>(editArrayImpl()); 285cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project} 286cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project 287cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project 288cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Projecttemplate<class TYPE> inline 289cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Projectconst TYPE& Vector<TYPE>::operator[](size_t index) const { 290bdf73c7efcfdefe990f55541b71e7869ac378090Mathias Agopian LOG_FATAL_IF(index>=size(), 291bdf73c7efcfdefe990f55541b71e7869ac378090Mathias Agopian "%s: index=%u out of range (%u)", __PRETTY_FUNCTION__, 292bdf73c7efcfdefe990f55541b71e7869ac378090Mathias Agopian int(index), int(size())); 293cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project return *(array() + index); 294cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project} 295cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project 296cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Projecttemplate<class TYPE> inline 297cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Projectconst TYPE& Vector<TYPE>::itemAt(size_t index) const { 298cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project return operator[](index); 299cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project} 300cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project 301cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Projecttemplate<class TYPE> inline 302cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Projectconst TYPE& Vector<TYPE>::top() const { 303cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project return *(array() + size() - 1); 304cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project} 305cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project 306cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Projecttemplate<class TYPE> inline 307cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source ProjectTYPE& Vector<TYPE>::editItemAt(size_t index) { 308cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project return *( static_cast<TYPE *>(editItemLocation(index)) ); 309cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project} 310cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project 311cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Projecttemplate<class TYPE> inline 312cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source ProjectTYPE& Vector<TYPE>::editTop() { 313cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project return *( static_cast<TYPE *>(editItemLocation(size()-1)) ); 314cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project} 315cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project 316cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Projecttemplate<class TYPE> inline 317cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Projectssize_t Vector<TYPE>::insertVectorAt(const Vector<TYPE>& vector, size_t index) { 318cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project return VectorImpl::insertVectorAt(reinterpret_cast<const VectorImpl&>(vector), index); 319cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project} 320cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project 321cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Projecttemplate<class TYPE> inline 322cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Projectssize_t Vector<TYPE>::appendVector(const Vector<TYPE>& vector) { 323cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project return VectorImpl::appendVector(reinterpret_cast<const VectorImpl&>(vector)); 324cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project} 325cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project 326cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Projecttemplate<class TYPE> inline 3279efaaa43595307786dbf06760823c25cb16b1925Jeff Brownssize_t Vector<TYPE>::insertArrayAt(const TYPE* array, size_t index, size_t length) { 3289efaaa43595307786dbf06760823c25cb16b1925Jeff Brown return VectorImpl::insertArrayAt(array, index, length); 32966db68948c83f1940fa66d76d28208b49bed7815Jeff Brown} 33066db68948c83f1940fa66d76d28208b49bed7815Jeff Brown 33166db68948c83f1940fa66d76d28208b49bed7815Jeff Browntemplate<class TYPE> inline 3329efaaa43595307786dbf06760823c25cb16b1925Jeff Brownssize_t Vector<TYPE>::appendArray(const TYPE* array, size_t length) { 3339efaaa43595307786dbf06760823c25cb16b1925Jeff Brown return VectorImpl::appendArray(array, length); 33466db68948c83f1940fa66d76d28208b49bed7815Jeff Brown} 33566db68948c83f1940fa66d76d28208b49bed7815Jeff Brown 33666db68948c83f1940fa66d76d28208b49bed7815Jeff Browntemplate<class TYPE> inline 337cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Projectssize_t Vector<TYPE>::insertAt(const TYPE& item, size_t index, size_t numItems) { 338cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project return VectorImpl::insertAt(&item, index, numItems); 339cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project} 340cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project 341cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Projecttemplate<class TYPE> inline 342cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Projectvoid Vector<TYPE>::push(const TYPE& item) { 343cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project return VectorImpl::push(&item); 344cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project} 345cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project 346cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Projecttemplate<class TYPE> inline 347cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Projectssize_t Vector<TYPE>::add(const TYPE& item) { 348cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project return VectorImpl::add(&item); 349cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project} 350cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project 351cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Projecttemplate<class TYPE> inline 352cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Projectssize_t Vector<TYPE>::replaceAt(const TYPE& item, size_t index) { 353cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project return VectorImpl::replaceAt(&item, index); 354cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project} 355cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project 356cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Projecttemplate<class TYPE> inline 357cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Projectssize_t Vector<TYPE>::insertAt(size_t index, size_t numItems) { 358cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project return VectorImpl::insertAt(index, numItems); 359cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project} 360cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project 361cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Projecttemplate<class TYPE> inline 362cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Projectvoid Vector<TYPE>::pop() { 363cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project VectorImpl::pop(); 364cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project} 365cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project 366cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Projecttemplate<class TYPE> inline 367cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Projectvoid Vector<TYPE>::push() { 368cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project VectorImpl::push(); 369cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project} 370cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project 371cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Projecttemplate<class TYPE> inline 372cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Projectssize_t Vector<TYPE>::add() { 373cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project return VectorImpl::add(); 374cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project} 375cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project 376cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Projecttemplate<class TYPE> inline 377cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Projectssize_t Vector<TYPE>::replaceAt(size_t index) { 378cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project return VectorImpl::replaceAt(index); 379cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project} 380cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project 381cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Projecttemplate<class TYPE> inline 382cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Projectssize_t Vector<TYPE>::removeItemsAt(size_t index, size_t count) { 383cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project return VectorImpl::removeItemsAt(index, count); 384cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project} 385cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project 386cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Projecttemplate<class TYPE> inline 387cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Projectstatus_t Vector<TYPE>::sort(Vector<TYPE>::compar_t cmp) { 38817b5b82d64686d482e6dcf96ee54fd62234d5f27Colin Cross return VectorImpl::sort(reinterpret_cast<VectorImpl::compar_t>(cmp)); 389cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project} 390cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project 391cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Projecttemplate<class TYPE> inline 392cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Projectstatus_t Vector<TYPE>::sort(Vector<TYPE>::compar_r_t cmp, void* state) { 39317b5b82d64686d482e6dcf96ee54fd62234d5f27Colin Cross return VectorImpl::sort(reinterpret_cast<VectorImpl::compar_r_t>(cmp), state); 394cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project} 395cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project 396cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project// --------------------------------------------------------------------------- 397cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project 398cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Projecttemplate<class TYPE> 39927a7aa0f59cc1af578eecb5565504b341363b8b9Vishwath MohanUTILS_VECTOR_NO_CFI void Vector<TYPE>::do_construct(void* storage, size_t num) const { 400cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project construct_type( reinterpret_cast<TYPE*>(storage), num ); 401cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project} 402cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project 403cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Projecttemplate<class TYPE> 404cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Projectvoid Vector<TYPE>::do_destroy(void* storage, size_t num) const { 405cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project destroy_type( reinterpret_cast<TYPE*>(storage), num ); 406cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project} 407cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project 408cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Projecttemplate<class TYPE> 40927a7aa0f59cc1af578eecb5565504b341363b8b9Vishwath MohanUTILS_VECTOR_NO_CFI void Vector<TYPE>::do_copy(void* dest, const void* from, size_t num) const { 410cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project copy_type( reinterpret_cast<TYPE*>(dest), reinterpret_cast<const TYPE*>(from), num ); 411cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project} 412cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project 413cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Projecttemplate<class TYPE> 41427a7aa0f59cc1af578eecb5565504b341363b8b9Vishwath MohanUTILS_VECTOR_NO_CFI void Vector<TYPE>::do_splat(void* dest, const void* item, size_t num) const { 415cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project splat_type( reinterpret_cast<TYPE*>(dest), reinterpret_cast<const TYPE*>(item), num ); 416cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project} 417cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project 418cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Projecttemplate<class TYPE> 41927a7aa0f59cc1af578eecb5565504b341363b8b9Vishwath MohanUTILS_VECTOR_NO_CFI void Vector<TYPE>::do_move_forward(void* dest, const void* from, size_t num) const { 420cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project move_forward_type( reinterpret_cast<TYPE*>(dest), reinterpret_cast<const TYPE*>(from), num ); 421cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project} 422cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project 423cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Projecttemplate<class TYPE> 42427a7aa0f59cc1af578eecb5565504b341363b8b9Vishwath MohanUTILS_VECTOR_NO_CFI void Vector<TYPE>::do_move_backward(void* dest, const void* from, size_t num) const { 425cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project move_backward_type( reinterpret_cast<TYPE*>(dest), reinterpret_cast<const TYPE*>(from), num ); 426cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project} 427cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project 428cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project}; // namespace android 429cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project 430cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project 431cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project// --------------------------------------------------------------------------- 432cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project 433cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project#endif // ANDROID_VECTOR_H 434