Home | History | Annotate | Download | only in core
      1 
      2 /*
      3  * Copyright 2006 The Android Open Source Project
      4  *
      5  * Use of this source code is governed by a BSD-style license that can be
      6  * found in the LICENSE file.
      7  */
      8 
      9 
     10 #ifndef SkDeque_DEFINED
     11 #define SkDeque_DEFINED
     12 
     13 #include "SkTypes.h"
     14 
     15 class SK_API SkDeque : SkNoncopyable {
     16 public:
     17     explicit SkDeque(size_t elemSize);
     18     SkDeque(size_t elemSize, void* storage, size_t storageSize);
     19     ~SkDeque();
     20 
     21     bool    empty() const { return 0 == fCount; }
     22     int     count() const { return fCount; }
     23     size_t  elemSize() const { return fElemSize; }
     24 
     25     const void* front() const;
     26     const void* back() const;
     27 
     28     void* front() {
     29         return (void*)((const SkDeque*)this)->front();
     30     }
     31 
     32     void* back() {
     33         return (void*)((const SkDeque*)this)->back();
     34     }
     35 
     36     void* push_front();
     37     void* push_back();
     38 
     39     void pop_front();
     40     void pop_back();
     41 
     42 private:
     43     struct Head;
     44 
     45 public:
     46     class F2BIter {
     47     public:
     48         /**
     49          * Creates an uninitialized iterator. Must be reset()
     50          */
     51         F2BIter();
     52 
     53         F2BIter(const SkDeque& d);
     54         void* next();
     55 
     56         void reset(const SkDeque& d);
     57 
     58     private:
     59         SkDeque::Head*  fHead;
     60         char*           fPos;
     61         size_t          fElemSize;
     62     };
     63 
     64 private:
     65     Head*   fFront;
     66     Head*   fBack;
     67     size_t  fElemSize;
     68     void*   fInitialStorage;
     69     int     fCount;
     70 
     71     friend class Iter;
     72 };
     73 
     74 #endif
     75