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