| Index: include/core/SkTInternalLList.h
 | 
| diff --git a/include/core/SkTInternalLList.h b/include/core/SkTInternalLList.h
 | 
| deleted file mode 100644
 | 
| index 1aa1a12209884f27b8e907506f7e85e5053a9c0e..0000000000000000000000000000000000000000
 | 
| --- a/include/core/SkTInternalLList.h
 | 
| +++ /dev/null
 | 
| @@ -1,272 +0,0 @@
 | 
| -/*
 | 
| - * Copyright 2012 Google Inc.
 | 
| - *
 | 
| - * Use of this source code is governed by a BSD-style license that can be
 | 
| - * found in the LICENSE file.
 | 
| - */
 | 
| -
 | 
| -#ifndef SkTInternalLList_DEFINED
 | 
| -#define SkTInternalLList_DEFINED
 | 
| -
 | 
| -#include "SkTypes.h"
 | 
| -
 | 
| -/**
 | 
| - * Helper class to automatically initialize the doubly linked list created pointers.
 | 
| - */
 | 
| -template <typename T> class SkPtrWrapper {
 | 
| -  public:
 | 
| -      SkPtrWrapper() : fPtr(NULL) {}
 | 
| -      SkPtrWrapper& operator =(T* ptr) { fPtr = ptr; return *this; }
 | 
| -      operator T*() const { return fPtr; }
 | 
| -      T* operator->() { return fPtr; }
 | 
| -  private:
 | 
| -      T* fPtr;
 | 
| -};
 | 
| -
 | 
| -
 | 
| -/**
 | 
| - * This macro creates the member variables required by the SkTInternalLList class. It should be
 | 
| - * placed in the private section of any class that will be stored in a double linked list.
 | 
| - */
 | 
| -#define SK_DECLARE_INTERNAL_LLIST_INTERFACE(ClassName)              \
 | 
| -    friend class SkTInternalLList<ClassName>;                       \
 | 
| -    /* back pointer to the owning list - for debugging */           \
 | 
| -    SkDEBUGCODE(SkPtrWrapper<SkTInternalLList<ClassName> > fList;)  \
 | 
| -    SkPtrWrapper<ClassName> fPrev;                                  \
 | 
| -    SkPtrWrapper<ClassName> fNext
 | 
| -
 | 
| -/**
 | 
| - * This class implements a templated internal doubly linked list data structure.
 | 
| - */
 | 
| -template <class T> class SkTInternalLList : SkNoncopyable {
 | 
| -public:
 | 
| -    SkTInternalLList()
 | 
| -        : fHead(NULL)
 | 
| -        , fTail(NULL) {
 | 
| -    }
 | 
| -
 | 
| -    void remove(T* entry) {
 | 
| -        SkASSERT(fHead && fTail);
 | 
| -        SkASSERT(this->isInList(entry));
 | 
| -
 | 
| -        T* prev = entry->fPrev;
 | 
| -        T* next = entry->fNext;
 | 
| -
 | 
| -        if (prev) {
 | 
| -            prev->fNext = next;
 | 
| -        } else {
 | 
| -            fHead = next;
 | 
| -        }
 | 
| -        if (next) {
 | 
| -            next->fPrev = prev;
 | 
| -        } else {
 | 
| -            fTail = prev;
 | 
| -        }
 | 
| -
 | 
| -        entry->fPrev = NULL;
 | 
| -        entry->fNext = NULL;
 | 
| -
 | 
| -#ifdef SK_DEBUG
 | 
| -        entry->fList = NULL;
 | 
| -#endif
 | 
| -    }
 | 
| -
 | 
| -    void addToHead(T* entry) {
 | 
| -        SkASSERT(NULL == entry->fPrev && NULL == entry->fNext);
 | 
| -        SkASSERT(NULL == entry->fList);
 | 
| -
 | 
| -        entry->fPrev = NULL;
 | 
| -        entry->fNext = fHead;
 | 
| -        if (fHead) {
 | 
| -            fHead->fPrev = entry;
 | 
| -        }
 | 
| -        fHead = entry;
 | 
| -        if (NULL == fTail) {
 | 
| -            fTail = entry;
 | 
| -        }
 | 
| -
 | 
| -#ifdef SK_DEBUG
 | 
| -        entry->fList = this;
 | 
| -#endif
 | 
| -    }
 | 
| -
 | 
| -    void addToTail(T* entry) {
 | 
| -        SkASSERT(NULL == entry->fPrev && NULL == entry->fNext);
 | 
| -        SkASSERT(NULL == entry->fList);
 | 
| -
 | 
| -        entry->fPrev = fTail;
 | 
| -        entry->fNext = NULL;
 | 
| -        if (fTail) {
 | 
| -            fTail->fNext = entry;
 | 
| -        }
 | 
| -        fTail = entry;
 | 
| -        if (NULL == fHead) {
 | 
| -            fHead = entry;
 | 
| -        }
 | 
| -
 | 
| -#ifdef SK_DEBUG
 | 
| -        entry->fList = this;
 | 
| -#endif
 | 
| -    }
 | 
| -
 | 
| -    /**
 | 
| -     * Inserts a new list entry before an existing list entry. The new entry must not already be
 | 
| -     * a member of this or any other list. If existingEntry is NULL then the new entry is added
 | 
| -     * at the tail.
 | 
| -     */
 | 
| -    void addBefore(T* newEntry, T* existingEntry) {
 | 
| -        SkASSERT(newEntry);
 | 
| -
 | 
| -        if (NULL == existingEntry) {
 | 
| -            this->addToTail(newEntry);
 | 
| -            return;
 | 
| -        }
 | 
| -
 | 
| -        SkASSERT(this->isInList(existingEntry));
 | 
| -        newEntry->fNext = existingEntry;
 | 
| -        T* prev = existingEntry->fPrev;
 | 
| -        existingEntry->fPrev = newEntry;
 | 
| -        newEntry->fPrev = prev;
 | 
| -        if (NULL == prev) {
 | 
| -            SkASSERT(fHead == existingEntry);
 | 
| -            fHead = newEntry;
 | 
| -        } else {
 | 
| -            prev->fNext = newEntry;
 | 
| -        }
 | 
| -#ifdef SK_DEBUG
 | 
| -        newEntry->fList = this;
 | 
| -#endif
 | 
| -    }
 | 
| -
 | 
| -    /**
 | 
| -     * Inserts a new list entry after an existing list entry. The new entry must not already be
 | 
| -     * a member of this or any other list. If existingEntry is NULL then the new entry is added
 | 
| -     * at the head.
 | 
| -     */
 | 
| -    void addAfter(T* newEntry, T* existingEntry) {
 | 
| -        SkASSERT(newEntry);
 | 
| -
 | 
| -        if (NULL == existingEntry) {
 | 
| -            this->addToHead(newEntry);
 | 
| -            return;
 | 
| -        }
 | 
| -
 | 
| -        SkASSERT(this->isInList(existingEntry));
 | 
| -        newEntry->fPrev = existingEntry;
 | 
| -        T* next = existingEntry->fNext;
 | 
| -        existingEntry->fNext = newEntry;
 | 
| -        newEntry->fNext = next;
 | 
| -        if (NULL == next) {
 | 
| -            SkASSERT(fTail == existingEntry);
 | 
| -            fTail = newEntry;
 | 
| -        } else {
 | 
| -            next->fPrev = newEntry;
 | 
| -        }
 | 
| -#ifdef SK_DEBUG
 | 
| -        newEntry->fList = this;
 | 
| -#endif
 | 
| -    }
 | 
| -
 | 
| -    bool isEmpty() const {
 | 
| -        return NULL == fHead && NULL == fTail;
 | 
| -    }
 | 
| -
 | 
| -    T* head() { return fHead; }
 | 
| -    T* tail() { return fTail; }
 | 
| -
 | 
| -    class Iter {
 | 
| -    public:
 | 
| -        enum IterStart {
 | 
| -            kHead_IterStart,
 | 
| -            kTail_IterStart
 | 
| -        };
 | 
| -
 | 
| -        Iter() : fCurr(NULL) {}
 | 
| -        Iter(const Iter& iter) : fCurr(iter.fCurr) {}
 | 
| -        Iter& operator= (const Iter& iter) { fCurr = iter.fCurr; return *this; }
 | 
| -
 | 
| -        T* init(const SkTInternalLList& list, IterStart startLoc) {
 | 
| -            if (kHead_IterStart == startLoc) {
 | 
| -                fCurr = list.fHead;
 | 
| -            } else {
 | 
| -                SkASSERT(kTail_IterStart == startLoc);
 | 
| -                fCurr = list.fTail;
 | 
| -            }
 | 
| -
 | 
| -            return fCurr;
 | 
| -        }
 | 
| -
 | 
| -        T* get() { return fCurr; }
 | 
| -
 | 
| -        /**
 | 
| -         * Return the next/previous element in the list or NULL if at the end.
 | 
| -         */
 | 
| -        T* next() {
 | 
| -            if (NULL == fCurr) {
 | 
| -                return NULL;
 | 
| -            }
 | 
| -
 | 
| -            fCurr = fCurr->fNext;
 | 
| -            return fCurr;
 | 
| -        }
 | 
| -
 | 
| -        T* prev() {
 | 
| -            if (NULL == fCurr) {
 | 
| -                return NULL;
 | 
| -            }
 | 
| -
 | 
| -            fCurr = fCurr->fPrev;
 | 
| -            return fCurr;
 | 
| -        }
 | 
| -
 | 
| -    private:
 | 
| -        T* fCurr;
 | 
| -    };
 | 
| -
 | 
| -#ifdef SK_DEBUG
 | 
| -    void validate() const {
 | 
| -        SkASSERT(!fHead == !fTail);
 | 
| -        Iter iter;
 | 
| -        for (T* item = iter.init(*this, Iter::kHead_IterStart); item; item = iter.next()) {
 | 
| -            SkASSERT(this->isInList(item));
 | 
| -            if (NULL == item->fPrev) {
 | 
| -                SkASSERT(fHead == item);
 | 
| -            } else {
 | 
| -                SkASSERT(item->fPrev->fNext == item);
 | 
| -            }
 | 
| -            if (NULL == item->fNext) {
 | 
| -                SkASSERT(fTail == item);
 | 
| -            } else {
 | 
| -                SkASSERT(item->fNext->fPrev == item);
 | 
| -            }
 | 
| -        }
 | 
| -    }
 | 
| -
 | 
| -    /**
 | 
| -     * Debugging-only method that uses the list back pointer to check if 'entry' is indeed in 'this'
 | 
| -     * list.
 | 
| -     */
 | 
| -    bool isInList(const T* entry) const {
 | 
| -        return entry->fList == this;
 | 
| -    }
 | 
| -
 | 
| -    /**
 | 
| -     * Debugging-only method that laboriously counts the list entries.
 | 
| -     */
 | 
| -    int countEntries() const {
 | 
| -        int count = 0;
 | 
| -        for (T* entry = fHead; entry; entry = entry->fNext) {
 | 
| -            ++count;
 | 
| -        }
 | 
| -        return count;
 | 
| -    }
 | 
| -#endif // SK_DEBUG
 | 
| -
 | 
| -private:
 | 
| -    T* fHead;
 | 
| -    T* fTail;
 | 
| -
 | 
| -    typedef SkNoncopyable INHERITED;
 | 
| -};
 | 
| -
 | 
| -#endif
 | 
| 
 |