SkDeque.h revision 137a4ca42423bbb6d683067ea544c9a48f18f06c
10910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project/* 20910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project * Copyright (C) 2006 The Android Open Source Project 30910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project * 40910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License"); 50910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project * you may not use this file except in compliance with the License. 60910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project * You may obtain a copy of the License at 70910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project * 80910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project * http://www.apache.org/licenses/LICENSE-2.0 90910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project * 100910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project * Unless required by applicable law or agreed to in writing, software 110910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS, 120910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 130910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project * See the License for the specific language governing permissions and 140910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project * limitations under the License. 150910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project */ 160910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 170910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#ifndef SkDeque_DEFINED 180910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#define SkDeque_DEFINED 190910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 200910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#include "SkTypes.h" 210910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 22137a4ca42423bbb6d683067ea544c9a48f18f06cDerek Sollenbergerclass SK_API SkDeque : SkNoncopyable { 230910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Projectpublic: 240910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project explicit SkDeque(size_t elemSize); 250910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project SkDeque(size_t elemSize, void* storage, size_t storageSize); 260910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project ~SkDeque(); 270910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 280910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project bool empty() const { return 0 == fCount; } 290910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project int count() const { return fCount; } 300910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project size_t elemSize() const { return fElemSize; } 310910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 320910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project const void* front() const; 330910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project const void* back() const; 340910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 350910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project void* front() { 360910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project return (void*)((const SkDeque*)this)->front(); 370910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project } 380910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 390910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project void* back() { 400910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project return (void*)((const SkDeque*)this)->back(); 410910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project } 420910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 430910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project void* push_front(); 440910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project void* push_back(); 4571531ca1f484da5837be8017a0c83e5bff701587Derek Sollenberger 460910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project void pop_front(); 470910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project void pop_back(); 480910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 490910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Projectprivate: 500910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project struct Head; 510910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 520910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Projectpublic: 5371531ca1f484da5837be8017a0c83e5bff701587Derek Sollenberger class F2BIter { 540910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project public: 5505b6b4d746867a9fb02e14edfe1bf3685abeb813Derek Sollenberger /** 5605b6b4d746867a9fb02e14edfe1bf3685abeb813Derek Sollenberger * Creates an uninitialized iterator. Must be reset() 5705b6b4d746867a9fb02e14edfe1bf3685abeb813Derek Sollenberger */ 5805b6b4d746867a9fb02e14edfe1bf3685abeb813Derek Sollenberger F2BIter(); 5905b6b4d746867a9fb02e14edfe1bf3685abeb813Derek Sollenberger 6071531ca1f484da5837be8017a0c83e5bff701587Derek Sollenberger F2BIter(const SkDeque& d); 610910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project void* next(); 620910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 6305b6b4d746867a9fb02e14edfe1bf3685abeb813Derek Sollenberger void reset(const SkDeque& d); 6405b6b4d746867a9fb02e14edfe1bf3685abeb813Derek Sollenberger 650910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project private: 660910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project SkDeque::Head* fHead; 670910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project char* fPos; 680910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project size_t fElemSize; 690910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project }; 700910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 710910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Projectprivate: 720910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project Head* fFront; 730910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project Head* fBack; 740910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project size_t fElemSize; 750910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project void* fInitialStorage; 760910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project int fCount; 7771531ca1f484da5837be8017a0c83e5bff701587Derek Sollenberger 780910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project friend class Iter; 790910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project}; 800910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 810910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#endif 82