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_IMPL_H 185b3b35296e8b2c8d3f07d32bb645d5414db41a1dRomain Guy#define ANDROID_HWUI_SORTED_LIST_IMPL_H 198550c4c7b5952b7a4e1e0ede95c9492d03099a13Romain Guy 208550c4c7b5952b7a4e1e0ede95c9492d03099a13Romain Guy#include <utils/VectorImpl.h> 218550c4c7b5952b7a4e1e0ede95c9492d03099a13Romain Guy 228550c4c7b5952b7a4e1e0ede95c9492d03099a13Romain Guynamespace android { 238550c4c7b5952b7a4e1e0ede95c9492d03099a13Romain Guynamespace uirenderer { 248550c4c7b5952b7a4e1e0ede95c9492d03099a13Romain Guy 258550c4c7b5952b7a4e1e0ede95c9492d03099a13Romain Guyclass SortedListImpl: public VectorImpl { 268550c4c7b5952b7a4e1e0ede95c9492d03099a13Romain Guypublic: 278550c4c7b5952b7a4e1e0ede95c9492d03099a13Romain Guy SortedListImpl(size_t itemSize, uint32_t flags); 288550c4c7b5952b7a4e1e0ede95c9492d03099a13Romain Guy SortedListImpl(const VectorImpl& rhs); 298550c4c7b5952b7a4e1e0ede95c9492d03099a13Romain Guy virtual ~SortedListImpl(); 308550c4c7b5952b7a4e1e0ede95c9492d03099a13Romain Guy 318550c4c7b5952b7a4e1e0ede95c9492d03099a13Romain Guy SortedListImpl& operator =(const SortedListImpl& rhs); 328550c4c7b5952b7a4e1e0ede95c9492d03099a13Romain Guy 338550c4c7b5952b7a4e1e0ede95c9492d03099a13Romain Guy ssize_t indexOf(const void* item) const; 348550c4c7b5952b7a4e1e0ede95c9492d03099a13Romain Guy size_t orderOf(const void* item) const; 358550c4c7b5952b7a4e1e0ede95c9492d03099a13Romain Guy ssize_t add(const void* item); 368550c4c7b5952b7a4e1e0ede95c9492d03099a13Romain Guy ssize_t merge(const VectorImpl& vector); 378550c4c7b5952b7a4e1e0ede95c9492d03099a13Romain Guy ssize_t merge(const SortedListImpl& vector); 388550c4c7b5952b7a4e1e0ede95c9492d03099a13Romain Guy ssize_t remove(const void* item); 398550c4c7b5952b7a4e1e0ede95c9492d03099a13Romain Guy 408550c4c7b5952b7a4e1e0ede95c9492d03099a13Romain Guyprotected: 418550c4c7b5952b7a4e1e0ede95c9492d03099a13Romain Guy virtual int do_compare(const void* lhs, const void* rhs) const = 0; 428550c4c7b5952b7a4e1e0ede95c9492d03099a13Romain Guy 438550c4c7b5952b7a4e1e0ede95c9492d03099a13Romain Guyprivate: 448550c4c7b5952b7a4e1e0ede95c9492d03099a13Romain Guy ssize_t _indexOrderOf(const void* item, size_t* order = 0) const; 458550c4c7b5952b7a4e1e0ede95c9492d03099a13Romain Guy 468550c4c7b5952b7a4e1e0ede95c9492d03099a13Romain Guy // these are made private, because they can't be used on a SortedVector 478550c4c7b5952b7a4e1e0ede95c9492d03099a13Romain Guy // (they don't have an implementation either) 488550c4c7b5952b7a4e1e0ede95c9492d03099a13Romain Guy ssize_t add(); 498550c4c7b5952b7a4e1e0ede95c9492d03099a13Romain Guy void pop(); 508550c4c7b5952b7a4e1e0ede95c9492d03099a13Romain Guy void push(); 518550c4c7b5952b7a4e1e0ede95c9492d03099a13Romain Guy void push(const void* item); 528550c4c7b5952b7a4e1e0ede95c9492d03099a13Romain Guy ssize_t insertVectorAt(const VectorImpl& vector, size_t index); 538550c4c7b5952b7a4e1e0ede95c9492d03099a13Romain Guy ssize_t appendVector(const VectorImpl& vector); 548550c4c7b5952b7a4e1e0ede95c9492d03099a13Romain Guy ssize_t insertArrayAt(const void* array, size_t index, size_t length); 558550c4c7b5952b7a4e1e0ede95c9492d03099a13Romain Guy ssize_t appendArray(const void* array, size_t length); 568550c4c7b5952b7a4e1e0ede95c9492d03099a13Romain Guy ssize_t insertAt(size_t where, size_t numItems = 1); 578550c4c7b5952b7a4e1e0ede95c9492d03099a13Romain Guy ssize_t insertAt(const void* item, size_t where, size_t numItems = 1); 588550c4c7b5952b7a4e1e0ede95c9492d03099a13Romain Guy ssize_t replaceAt(size_t index); 598550c4c7b5952b7a4e1e0ede95c9492d03099a13Romain Guy ssize_t replaceAt(const void* item, size_t index); 608550c4c7b5952b7a4e1e0ede95c9492d03099a13Romain Guy}; 618550c4c7b5952b7a4e1e0ede95c9492d03099a13Romain Guy 628550c4c7b5952b7a4e1e0ede95c9492d03099a13Romain Guy}; // namespace uirenderer 638550c4c7b5952b7a4e1e0ede95c9492d03099a13Romain Guy}; // namespace android 648550c4c7b5952b7a4e1e0ede95c9492d03099a13Romain Guy 655b3b35296e8b2c8d3f07d32bb645d5414db41a1dRomain Guy#endif // ANDROID_HWUI_SORTED_LIST_IMPL_H 66