00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017 #ifndef SkDeque_DEFINED
00018 #define SkDeque_DEFINED
00019
00020 #include "SkTypes.h"
00021
00022 class SkDeque : SkNoncopyable {
00023 public:
00024 explicit SkDeque(size_t elemSize);
00025 SkDeque(size_t elemSize, void* storage, size_t storageSize);
00026 ~SkDeque();
00027
00028 bool empty() const { return 0 == fCount; }
00029 int count() const { return fCount; }
00030 size_t elemSize() const { return fElemSize; }
00031
00032 const void* front() const;
00033 const void* back() const;
00034
00035 void* front() {
00036 return (void*)((const SkDeque*)this)->front();
00037 }
00038
00039 void* back() {
00040 return (void*)((const SkDeque*)this)->back();
00041 }
00042
00043 void* push_front();
00044 void* push_back();
00045
00046 void pop_front();
00047 void pop_back();
00048
00049 private:
00050 struct Head;
00051
00052 public:
00053 class Iter {
00054 public:
00055 Iter(const SkDeque& d);
00056 void* next();
00057
00058 private:
00059 SkDeque::Head* fHead;
00060 char* fPos;
00061 size_t fElemSize;
00062 };
00063
00064 private:
00065 Head* fFront;
00066 Head* fBack;
00067 size_t fElemSize;
00068 void* fInitialStorage;
00069 int fCount;
00070
00071 friend class Iter;
00072 };
00073
00074 #endif