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_SORTED_VECTOR_H 18cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project#define ANDROID_SORTED_VECTOR_H 19cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project 20cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project#include <assert.h> 21cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project#include <stdint.h> 22cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project#include <sys/types.h> 23cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project 24bdf73c7efcfdefe990f55541b71e7869ac378090Mathias Agopian#include <cutils/log.h> 25bdf73c7efcfdefe990f55541b71e7869ac378090Mathias Agopian 26cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project#include <utils/Vector.h> 27cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project#include <utils/VectorImpl.h> 28cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project#include <utils/TypeHelpers.h> 29cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project 30cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project// --------------------------------------------------------------------------- 31cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project 32cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Projectnamespace android { 33cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project 34cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Projecttemplate <class TYPE> 35cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Projectclass SortedVector : private SortedVectorImpl 36cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project{ 37320a2b410329998a60d754171e06f872aa9c0467Mathias Agopian friend class Vector<TYPE>; 38320a2b410329998a60d754171e06f872aa9c0467Mathias Agopian 39cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Projectpublic: 40cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project typedef TYPE value_type; 41cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project 42cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project /*! 43cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project * Constructors and destructors 44cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project */ 45cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project 46cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project SortedVector(); 47cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project SortedVector(const SortedVector<TYPE>& rhs); 48cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project virtual ~SortedVector(); 49cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project 50cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project /*! copy operator */ 51cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project const SortedVector<TYPE>& operator = (const SortedVector<TYPE>& rhs) const; 52cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project SortedVector<TYPE>& operator = (const SortedVector<TYPE>& rhs); 53cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project 54cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project /* 55cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project * empty the vector 56cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project */ 57cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project 58cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project inline void clear() { VectorImpl::clear(); } 59cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project 60cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project /*! 61cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project * vector stats 62cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project */ 63cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project 64cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project //! returns number of items in the vector 65cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project inline size_t size() const { return VectorImpl::size(); } 66bdf73c7efcfdefe990f55541b71e7869ac378090Mathias Agopian //! returns whether or not the vector is empty 67cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project inline bool isEmpty() const { return VectorImpl::isEmpty(); } 68cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project //! returns how many items can be stored without reallocating the backing store 69cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project inline size_t capacity() const { return VectorImpl::capacity(); } 70bdf73c7efcfdefe990f55541b71e7869ac378090Mathias Agopian //! sets the capacity. capacity can never be reduced less than size() 71cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project inline ssize_t setCapacity(size_t size) { return VectorImpl::setCapacity(size); } 72cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project 73cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project /*! 74cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project * C-style array access 75cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project */ 76cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project 77cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project //! read-only C-style access 78cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project inline const TYPE* array() const; 79cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project 80cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project //! read-write C-style access. BE VERY CAREFUL when modifying the array 81bdf73c7efcfdefe990f55541b71e7869ac378090Mathias Agopian //! you must keep it sorted! You usually don't use this function. 82cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project TYPE* editArray(); 83cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project 84cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project //! finds the index of an item 85cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project ssize_t indexOf(const TYPE& item) const; 86cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project 87cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project //! finds where this item should be inserted 88cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project size_t orderOf(const TYPE& item) const; 89cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project 90cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project 91cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project /*! 92cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project * accessors 93cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project */ 94cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project 95cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project //! read-only access to an item at a given index 96cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project inline const TYPE& operator [] (size_t index) const; 97cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project //! alternate name for operator [] 98cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project inline const TYPE& itemAt(size_t index) const; 99cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project //! stack-usage of the vector. returns the top of the stack (last element) 100cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project const TYPE& top() const; 101cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project 102cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project /*! 103bdf73c7efcfdefe990f55541b71e7869ac378090Mathias Agopian * modifying the array 104cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project */ 105cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project 106cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project //! add an item in the right place (and replace the one that is there) 107cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project ssize_t add(const TYPE& item); 108cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project 109cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project //! editItemAt() MUST NOT change the order of this item 110cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project TYPE& editItemAt(size_t index) { 111cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project return *( static_cast<TYPE *>(VectorImpl::editItemLocation(index)) ); 112cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project } 113cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project 114cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project //! merges a vector into this one 115cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project ssize_t merge(const Vector<TYPE>& vector); 116cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project ssize_t merge(const SortedVector<TYPE>& vector); 117cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project 118cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project //! removes an item 119cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project ssize_t remove(const TYPE&); 120cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project 121cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project //! remove several items 122cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project inline ssize_t removeItemsAt(size_t index, size_t count = 1); 123cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project //! remove one item 124cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project inline ssize_t removeAt(size_t index) { return removeItemsAt(index); } 125cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project 126cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Projectprotected: 127cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project virtual void do_construct(void* storage, size_t num) const; 128cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project virtual void do_destroy(void* storage, size_t num) const; 129cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project virtual void do_copy(void* dest, const void* from, size_t num) const; 130cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project virtual void do_splat(void* dest, const void* item, size_t num) const; 131cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project virtual void do_move_forward(void* dest, const void* from, size_t num) const; 132cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project virtual void do_move_backward(void* dest, const void* from, size_t num) const; 133cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project virtual int do_compare(const void* lhs, const void* rhs) const; 134cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project}; 135cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project 1369a0a76df1e961ef4621e81814d8bf891a09bef66Jeff Brown// SortedVector<T> can be trivially moved using memcpy() because moving does not 1379a0a76df1e961ef4621e81814d8bf891a09bef66Jeff Brown// require any change to the underlying SharedBuffer contents or reference count. 1389a0a76df1e961ef4621e81814d8bf891a09bef66Jeff Browntemplate<typename T> struct trait_trivial_move<SortedVector<T> > { enum { value = true }; }; 139cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project 140cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project// --------------------------------------------------------------------------- 141cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project// No user serviceable parts from here... 142cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project// --------------------------------------------------------------------------- 143cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project 144cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Projecttemplate<class TYPE> inline 145cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source ProjectSortedVector<TYPE>::SortedVector() 146cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project : SortedVectorImpl(sizeof(TYPE), 147cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project ((traits<TYPE>::has_trivial_ctor ? HAS_TRIVIAL_CTOR : 0) 148cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project |(traits<TYPE>::has_trivial_dtor ? HAS_TRIVIAL_DTOR : 0) 149a33bd1672fab3ac2ca72f2921716bf860d500aa3Mathias Agopian |(traits<TYPE>::has_trivial_copy ? HAS_TRIVIAL_COPY : 0)) 150cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project ) 151cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project{ 152cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project} 153cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project 154cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Projecttemplate<class TYPE> inline 155cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source ProjectSortedVector<TYPE>::SortedVector(const SortedVector<TYPE>& rhs) 156cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project : SortedVectorImpl(rhs) { 157cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project} 158cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project 159cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Projecttemplate<class TYPE> inline 160cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source ProjectSortedVector<TYPE>::~SortedVector() { 161cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project finish_vector(); 162cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project} 163cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project 164cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Projecttemplate<class TYPE> inline 165cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source ProjectSortedVector<TYPE>& SortedVector<TYPE>::operator = (const SortedVector<TYPE>& rhs) { 166cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project SortedVectorImpl::operator = (rhs); 167cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project return *this; 168cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project} 169cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project 170cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Projecttemplate<class TYPE> inline 171cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Projectconst SortedVector<TYPE>& SortedVector<TYPE>::operator = (const SortedVector<TYPE>& rhs) const { 172cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project SortedVectorImpl::operator = (rhs); 173cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project return *this; 174cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project} 175cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project 176cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Projecttemplate<class TYPE> inline 177cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Projectconst TYPE* SortedVector<TYPE>::array() const { 178cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project return static_cast<const TYPE *>(arrayImpl()); 179cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project} 180cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project 181cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Projecttemplate<class TYPE> inline 182cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source ProjectTYPE* SortedVector<TYPE>::editArray() { 183cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project return static_cast<TYPE *>(editArrayImpl()); 184cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project} 185cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project 186cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project 187cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Projecttemplate<class TYPE> inline 188cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Projectconst TYPE& SortedVector<TYPE>::operator[](size_t index) const { 189bdf73c7efcfdefe990f55541b71e7869ac378090Mathias Agopian LOG_FATAL_IF(index>=size(), 190bdf73c7efcfdefe990f55541b71e7869ac378090Mathias Agopian "%s: index=%u out of range (%u)", __PRETTY_FUNCTION__, 191bdf73c7efcfdefe990f55541b71e7869ac378090Mathias Agopian int(index), int(size())); 192cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project return *(array() + index); 193cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project} 194cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project 195cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Projecttemplate<class TYPE> inline 196cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Projectconst TYPE& SortedVector<TYPE>::itemAt(size_t index) const { 197cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project return operator[](index); 198cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project} 199cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project 200cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Projecttemplate<class TYPE> inline 201cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Projectconst TYPE& SortedVector<TYPE>::top() const { 202cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project return *(array() + size() - 1); 203cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project} 204cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project 205cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Projecttemplate<class TYPE> inline 206cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Projectssize_t SortedVector<TYPE>::add(const TYPE& item) { 207cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project return SortedVectorImpl::add(&item); 208cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project} 209cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project 210cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Projecttemplate<class TYPE> inline 211cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Projectssize_t SortedVector<TYPE>::indexOf(const TYPE& item) const { 212cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project return SortedVectorImpl::indexOf(&item); 213cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project} 214cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project 215cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Projecttemplate<class TYPE> inline 216cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Projectsize_t SortedVector<TYPE>::orderOf(const TYPE& item) const { 217cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project return SortedVectorImpl::orderOf(&item); 218cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project} 219cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project 220cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Projecttemplate<class TYPE> inline 221cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Projectssize_t SortedVector<TYPE>::merge(const Vector<TYPE>& vector) { 222cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project return SortedVectorImpl::merge(reinterpret_cast<const VectorImpl&>(vector)); 223cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project} 224cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project 225cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Projecttemplate<class TYPE> inline 226cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Projectssize_t SortedVector<TYPE>::merge(const SortedVector<TYPE>& vector) { 227cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project return SortedVectorImpl::merge(reinterpret_cast<const SortedVectorImpl&>(vector)); 228cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project} 229cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project 230cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Projecttemplate<class TYPE> inline 231cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Projectssize_t SortedVector<TYPE>::remove(const TYPE& item) { 232cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project return SortedVectorImpl::remove(&item); 233cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project} 234cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project 235cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Projecttemplate<class TYPE> inline 236cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Projectssize_t SortedVector<TYPE>::removeItemsAt(size_t index, size_t count) { 237cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project return VectorImpl::removeItemsAt(index, count); 238cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project} 239cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project 240cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project// --------------------------------------------------------------------------- 241cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project 242cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Projecttemplate<class TYPE> 243cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Projectvoid SortedVector<TYPE>::do_construct(void* storage, size_t num) const { 244cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project construct_type( reinterpret_cast<TYPE*>(storage), num ); 245cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project} 246cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project 247cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Projecttemplate<class TYPE> 248cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Projectvoid SortedVector<TYPE>::do_destroy(void* storage, size_t num) const { 249cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project destroy_type( reinterpret_cast<TYPE*>(storage), num ); 250cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project} 251cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project 252cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Projecttemplate<class TYPE> 253cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Projectvoid SortedVector<TYPE>::do_copy(void* dest, const void* from, size_t num) const { 254cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project copy_type( reinterpret_cast<TYPE*>(dest), reinterpret_cast<const TYPE*>(from), num ); 255cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project} 256cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project 257cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Projecttemplate<class TYPE> 258cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Projectvoid SortedVector<TYPE>::do_splat(void* dest, const void* item, size_t num) const { 259cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project splat_type( reinterpret_cast<TYPE*>(dest), reinterpret_cast<const TYPE*>(item), num ); 260cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project} 261cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project 262cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Projecttemplate<class TYPE> 263cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Projectvoid SortedVector<TYPE>::do_move_forward(void* dest, const void* from, size_t num) const { 264cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project move_forward_type( reinterpret_cast<TYPE*>(dest), reinterpret_cast<const TYPE*>(from), num ); 265cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project} 266cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project 267cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Projecttemplate<class TYPE> 268cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Projectvoid SortedVector<TYPE>::do_move_backward(void* dest, const void* from, size_t num) const { 269cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project move_backward_type( reinterpret_cast<TYPE*>(dest), reinterpret_cast<const TYPE*>(from), num ); 270cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project} 271cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project 272cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Projecttemplate<class TYPE> 273cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Projectint SortedVector<TYPE>::do_compare(const void* lhs, const void* rhs) const { 274cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project return compare_type( *reinterpret_cast<const TYPE*>(lhs), *reinterpret_cast<const TYPE*>(rhs) ); 275cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project} 276cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project 277cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project}; // namespace android 278cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project 279cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project 280cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project// --------------------------------------------------------------------------- 281cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project 282cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project#endif // ANDROID_SORTED_VECTOR_H 283