Index: src/core/SkPathHeap.h |
=================================================================== |
--- src/core/SkPathHeap.h (revision 13690) |
+++ src/core/SkPathHeap.h (working copy) |
@@ -30,6 +30,11 @@ |
*/ |
int append(const SkPath&); |
+ /** Add the specified path to the heap using its gen ID to de-duplicate. |
+ Returns the path's index in the heap + 1. |
+ */ |
+ int insert(const SkPath&); |
+ |
// called during picture-playback |
int count() const { return fPaths.count(); } |
const SkPath& operator[](int index) const { |
@@ -44,6 +49,27 @@ |
// we just store ptrs into fHeap here |
SkTDArray<SkPath*> fPaths; |
+ class LookupEntry { |
+ public: |
+ LookupEntry(const SkPath& path); |
+ |
+ int storageSlot() const { return fStorageSlot; } |
+ void setStorageSlot(int storageSlot) { fStorageSlot = storageSlot; } |
+ |
+ static bool Less(const LookupEntry& a, const LookupEntry& b) { |
+ return a.fGenerationID < b.fGenerationID; |
+ } |
+ |
+ private: |
+ uint32_t fGenerationID; // the SkPath's generation ID |
+ // the path's index in the heap + 1. It is 0 if the path is not yet in the heap. |
+ int fStorageSlot; |
+ }; |
+ |
+ SkTDArray<LookupEntry> fLookupTable; |
+ |
+ SkPathHeap::LookupEntry* addIfNotPresent(const SkPath& path); |
+ |
typedef SkRefCnt INHERITED; |
}; |