11cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger 20910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project/* 31cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger * Copyright 2006 The Android Open Source Project 40910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project * 51cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger * Use of this source code is governed by a BSD-style license that can be 61cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger * found in the LICENSE file. 70910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project */ 80910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 91cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger 100910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#ifndef SkDeque_DEFINED 110910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#define SkDeque_DEFINED 120910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 130910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#include "SkTypes.h" 140910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 15137a4ca42423bbb6d683067ea544c9a48f18f06cDerek Sollenbergerclass SK_API SkDeque : SkNoncopyable { 160910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Projectpublic: 170910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project explicit SkDeque(size_t elemSize); 180910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project SkDeque(size_t elemSize, void* storage, size_t storageSize); 190910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project ~SkDeque(); 200910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 210910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project bool empty() const { return 0 == fCount; } 220910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project int count() const { return fCount; } 230910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project size_t elemSize() const { return fElemSize; } 240910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 250910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project const void* front() const; 260910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project const void* back() const; 270910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 280910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project void* front() { 290910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project return (void*)((const SkDeque*)this)->front(); 300910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project } 310910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 320910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project void* back() { 330910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project return (void*)((const SkDeque*)this)->back(); 340910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project } 350910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 360910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project void* push_front(); 370910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project void* push_back(); 3871531ca1f484da5837be8017a0c83e5bff701587Derek Sollenberger 390910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project void pop_front(); 400910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project void pop_back(); 410910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 420910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Projectprivate: 430910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project struct Head; 440910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 450910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Projectpublic: 4671531ca1f484da5837be8017a0c83e5bff701587Derek Sollenberger class F2BIter { 470910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project public: 4805b6b4d746867a9fb02e14edfe1bf3685abeb813Derek Sollenberger /** 4905b6b4d746867a9fb02e14edfe1bf3685abeb813Derek Sollenberger * Creates an uninitialized iterator. Must be reset() 5005b6b4d746867a9fb02e14edfe1bf3685abeb813Derek Sollenberger */ 5105b6b4d746867a9fb02e14edfe1bf3685abeb813Derek Sollenberger F2BIter(); 5205b6b4d746867a9fb02e14edfe1bf3685abeb813Derek Sollenberger 5371531ca1f484da5837be8017a0c83e5bff701587Derek Sollenberger F2BIter(const SkDeque& d); 540910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project void* next(); 550910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 5605b6b4d746867a9fb02e14edfe1bf3685abeb813Derek Sollenberger void reset(const SkDeque& d); 5705b6b4d746867a9fb02e14edfe1bf3685abeb813Derek Sollenberger 580910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project private: 590910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project SkDeque::Head* fHead; 600910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project char* fPos; 610910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project size_t fElemSize; 620910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project }; 630910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 640910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Projectprivate: 650910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project Head* fFront; 660910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project Head* fBack; 670910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project size_t fElemSize; 680910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project void* fInitialStorage; 690910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project int fCount; 7071531ca1f484da5837be8017a0c83e5bff701587Derek Sollenberger 710910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project friend class Iter; 720910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project}; 730910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 740910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#endif 75