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