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