18550c4c7b5952b7a4e1e0ede95c9492d03099a13Romain Guy/* 28550c4c7b5952b7a4e1e0ede95c9492d03099a13Romain Guy * Copyright (C) 2010 The Android Open Source Project 38550c4c7b5952b7a4e1e0ede95c9492d03099a13Romain Guy * 48550c4c7b5952b7a4e1e0ede95c9492d03099a13Romain Guy * Licensed under the Apache License, Version 2.0 (the "License"); 58550c4c7b5952b7a4e1e0ede95c9492d03099a13Romain Guy * you may not use this file except in compliance with the License. 68550c4c7b5952b7a4e1e0ede95c9492d03099a13Romain Guy * You may obtain a copy of the License at 78550c4c7b5952b7a4e1e0ede95c9492d03099a13Romain Guy * 88550c4c7b5952b7a4e1e0ede95c9492d03099a13Romain Guy * http://www.apache.org/licenses/LICENSE-2.0 98550c4c7b5952b7a4e1e0ede95c9492d03099a13Romain Guy * 108550c4c7b5952b7a4e1e0ede95c9492d03099a13Romain Guy * Unless required by applicable law or agreed to in writing, software 118550c4c7b5952b7a4e1e0ede95c9492d03099a13Romain Guy * distributed under the License is distributed on an "AS IS" BASIS, 128550c4c7b5952b7a4e1e0ede95c9492d03099a13Romain Guy * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 138550c4c7b5952b7a4e1e0ede95c9492d03099a13Romain Guy * See the License for the specific language governing permissions and 148550c4c7b5952b7a4e1e0ede95c9492d03099a13Romain Guy * limitations under the License. 158550c4c7b5952b7a4e1e0ede95c9492d03099a13Romain Guy */ 168550c4c7b5952b7a4e1e0ede95c9492d03099a13Romain Guy 175b3b35296e8b2c8d3f07d32bb645d5414db41a1dRomain Guy#ifndef ANDROID_HWUI_SORTED_LIST_H 185b3b35296e8b2c8d3f07d32bb645d5414db41a1dRomain Guy#define ANDROID_HWUI_SORTED_LIST_H 198550c4c7b5952b7a4e1e0ede95c9492d03099a13Romain Guy 208550c4c7b5952b7a4e1e0ede95c9492d03099a13Romain Guy#include <stdint.h> 218550c4c7b5952b7a4e1e0ede95c9492d03099a13Romain Guy#include <sys/types.h> 228550c4c7b5952b7a4e1e0ede95c9492d03099a13Romain Guy 238550c4c7b5952b7a4e1e0ede95c9492d03099a13Romain Guy#include <utils/Vector.h> 248550c4c7b5952b7a4e1e0ede95c9492d03099a13Romain Guy#include <utils/TypeHelpers.h> 258550c4c7b5952b7a4e1e0ede95c9492d03099a13Romain Guy 268550c4c7b5952b7a4e1e0ede95c9492d03099a13Romain Guy#include "SortedListImpl.h" 278550c4c7b5952b7a4e1e0ede95c9492d03099a13Romain Guy 288550c4c7b5952b7a4e1e0ede95c9492d03099a13Romain Guynamespace android { 298550c4c7b5952b7a4e1e0ede95c9492d03099a13Romain Guynamespace uirenderer { 308550c4c7b5952b7a4e1e0ede95c9492d03099a13Romain Guy 318550c4c7b5952b7a4e1e0ede95c9492d03099a13Romain Guy/////////////////////////////////////////////////////////////////////////////// 328550c4c7b5952b7a4e1e0ede95c9492d03099a13Romain Guy// Sorted list 338550c4c7b5952b7a4e1e0ede95c9492d03099a13Romain Guy/////////////////////////////////////////////////////////////////////////////// 348550c4c7b5952b7a4e1e0ede95c9492d03099a13Romain Guy 358550c4c7b5952b7a4e1e0ede95c9492d03099a13Romain Guytemplate<class TYPE> 368550c4c7b5952b7a4e1e0ede95c9492d03099a13Romain Guyclass SortedList: private SortedListImpl { 378550c4c7b5952b7a4e1e0ede95c9492d03099a13Romain Guypublic: 388550c4c7b5952b7a4e1e0ede95c9492d03099a13Romain Guy typedef TYPE value_type; 398550c4c7b5952b7a4e1e0ede95c9492d03099a13Romain Guy 408550c4c7b5952b7a4e1e0ede95c9492d03099a13Romain Guy SortedList(); 418550c4c7b5952b7a4e1e0ede95c9492d03099a13Romain Guy SortedList(const SortedList<TYPE>& rhs); 428550c4c7b5952b7a4e1e0ede95c9492d03099a13Romain Guy virtual ~SortedList(); 438550c4c7b5952b7a4e1e0ede95c9492d03099a13Romain Guy 448550c4c7b5952b7a4e1e0ede95c9492d03099a13Romain Guy const SortedList<TYPE>& operator =(const SortedList<TYPE>& rhs) const; 458550c4c7b5952b7a4e1e0ede95c9492d03099a13Romain Guy SortedList<TYPE>& operator =(const SortedList<TYPE>& rhs); 468550c4c7b5952b7a4e1e0ede95c9492d03099a13Romain Guy 478550c4c7b5952b7a4e1e0ede95c9492d03099a13Romain Guy inline void clear() { 488550c4c7b5952b7a4e1e0ede95c9492d03099a13Romain Guy VectorImpl::clear(); 498550c4c7b5952b7a4e1e0ede95c9492d03099a13Romain Guy } 508550c4c7b5952b7a4e1e0ede95c9492d03099a13Romain Guy 518550c4c7b5952b7a4e1e0ede95c9492d03099a13Romain Guy inline size_t size() const { 528550c4c7b5952b7a4e1e0ede95c9492d03099a13Romain Guy return VectorImpl::size(); 538550c4c7b5952b7a4e1e0ede95c9492d03099a13Romain Guy } 548550c4c7b5952b7a4e1e0ede95c9492d03099a13Romain Guy 558550c4c7b5952b7a4e1e0ede95c9492d03099a13Romain Guy inline bool isEmpty() const { 568550c4c7b5952b7a4e1e0ede95c9492d03099a13Romain Guy return VectorImpl::isEmpty(); 578550c4c7b5952b7a4e1e0ede95c9492d03099a13Romain Guy } 588550c4c7b5952b7a4e1e0ede95c9492d03099a13Romain Guy 598550c4c7b5952b7a4e1e0ede95c9492d03099a13Romain Guy inline size_t capacity() const { 608550c4c7b5952b7a4e1e0ede95c9492d03099a13Romain Guy return VectorImpl::capacity(); 618550c4c7b5952b7a4e1e0ede95c9492d03099a13Romain Guy } 628550c4c7b5952b7a4e1e0ede95c9492d03099a13Romain Guy 638550c4c7b5952b7a4e1e0ede95c9492d03099a13Romain Guy inline ssize_t setCapacity(size_t size) { 648550c4c7b5952b7a4e1e0ede95c9492d03099a13Romain Guy return VectorImpl::setCapacity(size); 658550c4c7b5952b7a4e1e0ede95c9492d03099a13Romain Guy } 668550c4c7b5952b7a4e1e0ede95c9492d03099a13Romain Guy 678550c4c7b5952b7a4e1e0ede95c9492d03099a13Romain Guy inline const TYPE* array() const; 688550c4c7b5952b7a4e1e0ede95c9492d03099a13Romain Guy 698550c4c7b5952b7a4e1e0ede95c9492d03099a13Romain Guy TYPE* editArray(); 708550c4c7b5952b7a4e1e0ede95c9492d03099a13Romain Guy 718550c4c7b5952b7a4e1e0ede95c9492d03099a13Romain Guy ssize_t indexOf(const TYPE& item) const; 728550c4c7b5952b7a4e1e0ede95c9492d03099a13Romain Guy size_t orderOf(const TYPE& item) const; 738550c4c7b5952b7a4e1e0ede95c9492d03099a13Romain Guy 748550c4c7b5952b7a4e1e0ede95c9492d03099a13Romain Guy inline const TYPE& operator [](size_t index) const; 758550c4c7b5952b7a4e1e0ede95c9492d03099a13Romain Guy inline const TYPE& itemAt(size_t index) const; 768550c4c7b5952b7a4e1e0ede95c9492d03099a13Romain Guy const TYPE& top() const; 778550c4c7b5952b7a4e1e0ede95c9492d03099a13Romain Guy const TYPE& mirrorItemAt(ssize_t index) const; 788550c4c7b5952b7a4e1e0ede95c9492d03099a13Romain Guy 798550c4c7b5952b7a4e1e0ede95c9492d03099a13Romain Guy ssize_t add(const TYPE& item); 808550c4c7b5952b7a4e1e0ede95c9492d03099a13Romain Guy 818550c4c7b5952b7a4e1e0ede95c9492d03099a13Romain Guy TYPE& editItemAt(size_t index) { 828550c4c7b5952b7a4e1e0ede95c9492d03099a13Romain Guy return *(static_cast<TYPE *> (VectorImpl::editItemLocation(index))); 838550c4c7b5952b7a4e1e0ede95c9492d03099a13Romain Guy } 848550c4c7b5952b7a4e1e0ede95c9492d03099a13Romain Guy 858550c4c7b5952b7a4e1e0ede95c9492d03099a13Romain Guy ssize_t merge(const Vector<TYPE>& vector); 868550c4c7b5952b7a4e1e0ede95c9492d03099a13Romain Guy ssize_t merge(const SortedList<TYPE>& vector); 878550c4c7b5952b7a4e1e0ede95c9492d03099a13Romain Guy 888550c4c7b5952b7a4e1e0ede95c9492d03099a13Romain Guy ssize_t remove(const TYPE&); 898550c4c7b5952b7a4e1e0ede95c9492d03099a13Romain Guy 908550c4c7b5952b7a4e1e0ede95c9492d03099a13Romain Guy inline ssize_t removeItemsAt(size_t index, size_t count = 1); 918550c4c7b5952b7a4e1e0ede95c9492d03099a13Romain Guy inline ssize_t removeAt(size_t index) { 928550c4c7b5952b7a4e1e0ede95c9492d03099a13Romain Guy return removeItemsAt(index); 938550c4c7b5952b7a4e1e0ede95c9492d03099a13Romain Guy } 948550c4c7b5952b7a4e1e0ede95c9492d03099a13Romain Guy 958550c4c7b5952b7a4e1e0ede95c9492d03099a13Romain Guyprotected: 968550c4c7b5952b7a4e1e0ede95c9492d03099a13Romain Guy virtual void do_construct(void* storage, size_t num) const; 978550c4c7b5952b7a4e1e0ede95c9492d03099a13Romain Guy virtual void do_destroy(void* storage, size_t num) const; 988550c4c7b5952b7a4e1e0ede95c9492d03099a13Romain Guy virtual void do_copy(void* dest, const void* from, size_t num) const; 998550c4c7b5952b7a4e1e0ede95c9492d03099a13Romain Guy virtual void do_splat(void* dest, const void* item, size_t num) const; 1008550c4c7b5952b7a4e1e0ede95c9492d03099a13Romain Guy virtual void do_move_forward(void* dest, const void* from, size_t num) const; 1018550c4c7b5952b7a4e1e0ede95c9492d03099a13Romain Guy virtual void do_move_backward(void* dest, const void* from, size_t num) const; 1028550c4c7b5952b7a4e1e0ede95c9492d03099a13Romain Guy virtual int do_compare(const void* lhs, const void* rhs) const; 1038550c4c7b5952b7a4e1e0ede95c9492d03099a13Romain Guy}; // class SortedList 1048550c4c7b5952b7a4e1e0ede95c9492d03099a13Romain Guy 1058550c4c7b5952b7a4e1e0ede95c9492d03099a13Romain Guy/////////////////////////////////////////////////////////////////////////////// 1068550c4c7b5952b7a4e1e0ede95c9492d03099a13Romain Guy// Implementation 1078550c4c7b5952b7a4e1e0ede95c9492d03099a13Romain Guy/////////////////////////////////////////////////////////////////////////////// 1088550c4c7b5952b7a4e1e0ede95c9492d03099a13Romain Guy 1098550c4c7b5952b7a4e1e0ede95c9492d03099a13Romain Guytemplate<class TYPE> 1108550c4c7b5952b7a4e1e0ede95c9492d03099a13Romain Guyinline SortedList<TYPE>::SortedList(): 1118550c4c7b5952b7a4e1e0ede95c9492d03099a13Romain Guy SortedListImpl(sizeof(TYPE), ((traits<TYPE>::has_trivial_ctor ? HAS_TRIVIAL_CTOR : 0) 1128550c4c7b5952b7a4e1e0ede95c9492d03099a13Romain Guy | (traits<TYPE>::has_trivial_dtor ? HAS_TRIVIAL_DTOR : 0) 1138550c4c7b5952b7a4e1e0ede95c9492d03099a13Romain Guy | (traits<TYPE>::has_trivial_copy ? HAS_TRIVIAL_COPY : 0))) { 1148550c4c7b5952b7a4e1e0ede95c9492d03099a13Romain Guy} 1158550c4c7b5952b7a4e1e0ede95c9492d03099a13Romain Guy 1168550c4c7b5952b7a4e1e0ede95c9492d03099a13Romain Guytemplate<class TYPE> 1178550c4c7b5952b7a4e1e0ede95c9492d03099a13Romain Guyinline SortedList<TYPE>::SortedList(const SortedList<TYPE>& rhs): SortedListImpl(rhs) { 1188550c4c7b5952b7a4e1e0ede95c9492d03099a13Romain Guy} 1198550c4c7b5952b7a4e1e0ede95c9492d03099a13Romain Guy 1208550c4c7b5952b7a4e1e0ede95c9492d03099a13Romain Guytemplate<class TYPE> inline SortedList<TYPE>::~SortedList() { 1218550c4c7b5952b7a4e1e0ede95c9492d03099a13Romain Guy finish_vector(); 1228550c4c7b5952b7a4e1e0ede95c9492d03099a13Romain Guy} 1238550c4c7b5952b7a4e1e0ede95c9492d03099a13Romain Guy 1248550c4c7b5952b7a4e1e0ede95c9492d03099a13Romain Guytemplate<class TYPE> 1258550c4c7b5952b7a4e1e0ede95c9492d03099a13Romain Guyinline SortedList<TYPE>& SortedList<TYPE>::operator =(const SortedList<TYPE>& rhs) { 1268550c4c7b5952b7a4e1e0ede95c9492d03099a13Romain Guy SortedListImpl::operator =(rhs); 1278550c4c7b5952b7a4e1e0ede95c9492d03099a13Romain Guy return *this; 1288550c4c7b5952b7a4e1e0ede95c9492d03099a13Romain Guy} 1298550c4c7b5952b7a4e1e0ede95c9492d03099a13Romain Guy 1308550c4c7b5952b7a4e1e0ede95c9492d03099a13Romain Guytemplate<class TYPE> 1318550c4c7b5952b7a4e1e0ede95c9492d03099a13Romain Guyinline const SortedList<TYPE>& SortedList<TYPE>::operator =( 1328550c4c7b5952b7a4e1e0ede95c9492d03099a13Romain Guy const SortedList<TYPE>& rhs) const { 1338550c4c7b5952b7a4e1e0ede95c9492d03099a13Romain Guy SortedListImpl::operator =(rhs); 1348550c4c7b5952b7a4e1e0ede95c9492d03099a13Romain Guy return *this; 1358550c4c7b5952b7a4e1e0ede95c9492d03099a13Romain Guy} 1368550c4c7b5952b7a4e1e0ede95c9492d03099a13Romain Guy 1378550c4c7b5952b7a4e1e0ede95c9492d03099a13Romain Guytemplate<class TYPE> 1388550c4c7b5952b7a4e1e0ede95c9492d03099a13Romain Guyinline const TYPE* SortedList<TYPE>::array() const { 1398550c4c7b5952b7a4e1e0ede95c9492d03099a13Romain Guy return static_cast<const TYPE *> (arrayImpl()); 1408550c4c7b5952b7a4e1e0ede95c9492d03099a13Romain Guy} 1418550c4c7b5952b7a4e1e0ede95c9492d03099a13Romain Guy 1428550c4c7b5952b7a4e1e0ede95c9492d03099a13Romain Guytemplate<class TYPE> 1438550c4c7b5952b7a4e1e0ede95c9492d03099a13Romain Guyinline TYPE* SortedList<TYPE>::editArray() { 1448550c4c7b5952b7a4e1e0ede95c9492d03099a13Romain Guy return static_cast<TYPE *> (editArrayImpl()); 1458550c4c7b5952b7a4e1e0ede95c9492d03099a13Romain Guy} 1468550c4c7b5952b7a4e1e0ede95c9492d03099a13Romain Guy 1478550c4c7b5952b7a4e1e0ede95c9492d03099a13Romain Guytemplate<class TYPE> 1488550c4c7b5952b7a4e1e0ede95c9492d03099a13Romain Guyinline const TYPE& SortedList<TYPE>::operator[](size_t index) const { 1498550c4c7b5952b7a4e1e0ede95c9492d03099a13Romain Guy assert( index<size() ); 1508550c4c7b5952b7a4e1e0ede95c9492d03099a13Romain Guy return *(array() + index); 1518550c4c7b5952b7a4e1e0ede95c9492d03099a13Romain Guy} 1528550c4c7b5952b7a4e1e0ede95c9492d03099a13Romain Guy 1538550c4c7b5952b7a4e1e0ede95c9492d03099a13Romain Guytemplate<class TYPE> 1548550c4c7b5952b7a4e1e0ede95c9492d03099a13Romain Guyinline const TYPE& SortedList<TYPE>::itemAt(size_t index) const { 1558550c4c7b5952b7a4e1e0ede95c9492d03099a13Romain Guy return operator[](index); 1568550c4c7b5952b7a4e1e0ede95c9492d03099a13Romain Guy} 1578550c4c7b5952b7a4e1e0ede95c9492d03099a13Romain Guy 1588550c4c7b5952b7a4e1e0ede95c9492d03099a13Romain Guytemplate<class TYPE> 1598550c4c7b5952b7a4e1e0ede95c9492d03099a13Romain Guyinline const TYPE& SortedList<TYPE>::mirrorItemAt(ssize_t index) const { 1608550c4c7b5952b7a4e1e0ede95c9492d03099a13Romain Guy assert( (index>0 ? index : -index)<size() ); 1618550c4c7b5952b7a4e1e0ede95c9492d03099a13Romain Guy return *(array() + ((index < 0) ? (size() - index) : index)); 1628550c4c7b5952b7a4e1e0ede95c9492d03099a13Romain Guy} 1638550c4c7b5952b7a4e1e0ede95c9492d03099a13Romain Guy 1648550c4c7b5952b7a4e1e0ede95c9492d03099a13Romain Guytemplate<class TYPE> 1658550c4c7b5952b7a4e1e0ede95c9492d03099a13Romain Guyinline const TYPE& SortedList<TYPE>::top() const { 1668550c4c7b5952b7a4e1e0ede95c9492d03099a13Romain Guy return *(array() + size() - 1); 1678550c4c7b5952b7a4e1e0ede95c9492d03099a13Romain Guy} 1688550c4c7b5952b7a4e1e0ede95c9492d03099a13Romain Guy 1698550c4c7b5952b7a4e1e0ede95c9492d03099a13Romain Guytemplate<class TYPE> 1708550c4c7b5952b7a4e1e0ede95c9492d03099a13Romain Guyinline ssize_t SortedList<TYPE>::add(const TYPE& item) { 1718550c4c7b5952b7a4e1e0ede95c9492d03099a13Romain Guy return SortedListImpl::add(&item); 1728550c4c7b5952b7a4e1e0ede95c9492d03099a13Romain Guy} 1738550c4c7b5952b7a4e1e0ede95c9492d03099a13Romain Guy 1748550c4c7b5952b7a4e1e0ede95c9492d03099a13Romain Guytemplate<class TYPE> 1758550c4c7b5952b7a4e1e0ede95c9492d03099a13Romain Guyinline ssize_t SortedList<TYPE>::indexOf(const TYPE& item) const { 1768550c4c7b5952b7a4e1e0ede95c9492d03099a13Romain Guy return SortedListImpl::indexOf(&item); 1778550c4c7b5952b7a4e1e0ede95c9492d03099a13Romain Guy} 1788550c4c7b5952b7a4e1e0ede95c9492d03099a13Romain Guy 1798550c4c7b5952b7a4e1e0ede95c9492d03099a13Romain Guytemplate<class TYPE> 1808550c4c7b5952b7a4e1e0ede95c9492d03099a13Romain Guyinline size_t SortedList<TYPE>::orderOf(const TYPE& item) const { 1818550c4c7b5952b7a4e1e0ede95c9492d03099a13Romain Guy return SortedListImpl::orderOf(&item); 1828550c4c7b5952b7a4e1e0ede95c9492d03099a13Romain Guy} 1838550c4c7b5952b7a4e1e0ede95c9492d03099a13Romain Guy 1848550c4c7b5952b7a4e1e0ede95c9492d03099a13Romain Guytemplate<class TYPE> 1858550c4c7b5952b7a4e1e0ede95c9492d03099a13Romain Guyinline ssize_t SortedList<TYPE>::merge(const Vector<TYPE>& vector) { 1868550c4c7b5952b7a4e1e0ede95c9492d03099a13Romain Guy return SortedListImpl::merge(reinterpret_cast<const VectorImpl&> (vector)); 1878550c4c7b5952b7a4e1e0ede95c9492d03099a13Romain Guy} 1888550c4c7b5952b7a4e1e0ede95c9492d03099a13Romain Guy 1898550c4c7b5952b7a4e1e0ede95c9492d03099a13Romain Guytemplate<class TYPE> 1908550c4c7b5952b7a4e1e0ede95c9492d03099a13Romain Guyinline ssize_t SortedList<TYPE>::merge(const SortedList<TYPE>& vector) { 1918550c4c7b5952b7a4e1e0ede95c9492d03099a13Romain Guy return SortedListImpl::merge(reinterpret_cast<const SortedListImpl&> (vector)); 1928550c4c7b5952b7a4e1e0ede95c9492d03099a13Romain Guy} 1938550c4c7b5952b7a4e1e0ede95c9492d03099a13Romain Guy 1948550c4c7b5952b7a4e1e0ede95c9492d03099a13Romain Guytemplate<class TYPE> 1958550c4c7b5952b7a4e1e0ede95c9492d03099a13Romain Guyinline ssize_t SortedList<TYPE>::remove(const TYPE& item) { 1968550c4c7b5952b7a4e1e0ede95c9492d03099a13Romain Guy return SortedListImpl::remove(&item); 1978550c4c7b5952b7a4e1e0ede95c9492d03099a13Romain Guy} 1988550c4c7b5952b7a4e1e0ede95c9492d03099a13Romain Guy 1998550c4c7b5952b7a4e1e0ede95c9492d03099a13Romain Guytemplate<class TYPE> 2008550c4c7b5952b7a4e1e0ede95c9492d03099a13Romain Guyinline ssize_t SortedList<TYPE>::removeItemsAt(size_t index, size_t count) { 2018550c4c7b5952b7a4e1e0ede95c9492d03099a13Romain Guy return VectorImpl::removeItemsAt(index, count); 2028550c4c7b5952b7a4e1e0ede95c9492d03099a13Romain Guy} 2038550c4c7b5952b7a4e1e0ede95c9492d03099a13Romain Guy 2048550c4c7b5952b7a4e1e0ede95c9492d03099a13Romain Guytemplate<class TYPE> 2058550c4c7b5952b7a4e1e0ede95c9492d03099a13Romain Guyvoid SortedList<TYPE>::do_construct(void* storage, size_t num) const { 2068550c4c7b5952b7a4e1e0ede95c9492d03099a13Romain Guy construct_type(reinterpret_cast<TYPE*> (storage), num); 2078550c4c7b5952b7a4e1e0ede95c9492d03099a13Romain Guy} 2088550c4c7b5952b7a4e1e0ede95c9492d03099a13Romain Guy 2098550c4c7b5952b7a4e1e0ede95c9492d03099a13Romain Guytemplate<class TYPE> 2108550c4c7b5952b7a4e1e0ede95c9492d03099a13Romain Guyvoid SortedList<TYPE>::do_destroy(void* storage, size_t num) const { 2118550c4c7b5952b7a4e1e0ede95c9492d03099a13Romain Guy destroy_type(reinterpret_cast<TYPE*> (storage), num); 2128550c4c7b5952b7a4e1e0ede95c9492d03099a13Romain Guy} 2138550c4c7b5952b7a4e1e0ede95c9492d03099a13Romain Guy 2148550c4c7b5952b7a4e1e0ede95c9492d03099a13Romain Guytemplate<class TYPE> 2158550c4c7b5952b7a4e1e0ede95c9492d03099a13Romain Guyvoid SortedList<TYPE>::do_copy(void* dest, const void* from, size_t num) const { 2168550c4c7b5952b7a4e1e0ede95c9492d03099a13Romain Guy copy_type(reinterpret_cast<TYPE*> (dest), reinterpret_cast<const TYPE*> (from), num); 2178550c4c7b5952b7a4e1e0ede95c9492d03099a13Romain Guy} 2188550c4c7b5952b7a4e1e0ede95c9492d03099a13Romain Guy 2198550c4c7b5952b7a4e1e0ede95c9492d03099a13Romain Guytemplate<class TYPE> 2208550c4c7b5952b7a4e1e0ede95c9492d03099a13Romain Guyvoid SortedList<TYPE>::do_splat(void* dest, const void* item, size_t num) const { 2218550c4c7b5952b7a4e1e0ede95c9492d03099a13Romain Guy splat_type(reinterpret_cast<TYPE*> (dest), reinterpret_cast<const TYPE*> (item), num); 2228550c4c7b5952b7a4e1e0ede95c9492d03099a13Romain Guy} 2238550c4c7b5952b7a4e1e0ede95c9492d03099a13Romain Guy 2248550c4c7b5952b7a4e1e0ede95c9492d03099a13Romain Guytemplate<class TYPE> 2258550c4c7b5952b7a4e1e0ede95c9492d03099a13Romain Guyvoid SortedList<TYPE>::do_move_forward(void* dest, const void* from, size_t num) const { 2268550c4c7b5952b7a4e1e0ede95c9492d03099a13Romain Guy move_forward_type(reinterpret_cast<TYPE*> (dest), reinterpret_cast<const TYPE*> (from), num); 2278550c4c7b5952b7a4e1e0ede95c9492d03099a13Romain Guy} 2288550c4c7b5952b7a4e1e0ede95c9492d03099a13Romain Guy 2298550c4c7b5952b7a4e1e0ede95c9492d03099a13Romain Guytemplate<class TYPE> 2308550c4c7b5952b7a4e1e0ede95c9492d03099a13Romain Guyvoid SortedList<TYPE>::do_move_backward(void* dest, const void* from, size_t num) const { 2318550c4c7b5952b7a4e1e0ede95c9492d03099a13Romain Guy move_backward_type(reinterpret_cast<TYPE*> (dest), reinterpret_cast<const TYPE*> (from), num); 2328550c4c7b5952b7a4e1e0ede95c9492d03099a13Romain Guy} 2338550c4c7b5952b7a4e1e0ede95c9492d03099a13Romain Guy 2348550c4c7b5952b7a4e1e0ede95c9492d03099a13Romain Guytemplate<class TYPE> 2358550c4c7b5952b7a4e1e0ede95c9492d03099a13Romain Guyint SortedList<TYPE>::do_compare(const void* lhs, const void* rhs) const { 2368550c4c7b5952b7a4e1e0ede95c9492d03099a13Romain Guy return compare_type(*reinterpret_cast<const TYPE*> (lhs), *reinterpret_cast<const TYPE*> (rhs)); 2378550c4c7b5952b7a4e1e0ede95c9492d03099a13Romain Guy} 2388550c4c7b5952b7a4e1e0ede95c9492d03099a13Romain Guy 2398550c4c7b5952b7a4e1e0ede95c9492d03099a13Romain Guy}; // namespace uirenderer 2408550c4c7b5952b7a4e1e0ede95c9492d03099a13Romain Guy}; // namespace android 2418550c4c7b5952b7a4e1e0ede95c9492d03099a13Romain Guy 2425b3b35296e8b2c8d3f07d32bb645d5414db41a1dRomain Guy#endif // ANDROID_HWUI_SORTED_LIST_H 243