| OLD | NEW | 
|   1  |   1  | 
|   2 /* |   2 /* | 
|   3  * Copyright 2012 Google Inc. |   3  * Copyright 2012 Google Inc. | 
|   4  * |   4  * | 
|   5  * Use of this source code is governed by a BSD-style license that can be |   5  * Use of this source code is governed by a BSD-style license that can be | 
|   6  * found in the LICENSE file. |   6  * found in the LICENSE file. | 
|   7  */ |   7  */ | 
|   8  |   8  | 
|   9 #ifndef SkBBoxHierarchy_DEFINED |   9 #ifndef SkBBoxHierarchy_DEFINED | 
|  10 #define SkBBoxHierarchy_DEFINED |  10 #define SkBBoxHierarchy_DEFINED | 
|  11  |  11  | 
|  12 #include "SkRect.h" |  12 #include "SkRect.h" | 
|  13 #include "SkTDArray.h" |  13 #include "SkTDArray.h" | 
|  14 #include "SkRefCnt.h" |  14 #include "SkRefCnt.h" | 
|  15  |  15  | 
|  16 /** |  16 /** | 
 |  17  * Interface for a client class that implements utility methods needed | 
 |  18  * by SkBBoxHierarchy that require intrinsic knowledge of the data  | 
 |  19  * object type that is stored in the bounding box hierarchy. | 
 |  20  */ | 
 |  21 class SkBBoxHierarchyClient { | 
 |  22 public: | 
 |  23     virtual ~SkBBoxHierarchyClient() {} | 
 |  24  | 
 |  25     /** | 
 |  26      * Implements a rewind stop condition used by rewindInserts | 
 |  27      * Must returns true if 'data' points to an object that should be re-wound | 
 |  28      * by rewinfInserts. | 
 |  29      */ | 
 |  30     virtual bool shouldRewind(void* data) = 0; | 
 |  31 }; | 
 |  32  | 
 |  33 /** | 
|  17  * Interface for a spatial data structure that associates user data pointers wit
    h axis-aligned |  34  * Interface for a spatial data structure that associates user data pointers wit
    h axis-aligned | 
|  18  * bounding boxes, and allows efficient retrieval of intersections with query re
    ctangles. |  35  * bounding boxes, and allows efficient retrieval of intersections with query re
    ctangles. | 
|  19  */ |  36  */ | 
|  20 class SkBBoxHierarchy : public SkRefCnt { |  37 class SkBBoxHierarchy : public SkRefCnt { | 
|  21 public: |  38 public: | 
|  22     SK_DECLARE_INST_COUNT(SkBBoxHierarchy) |  39     SK_DECLARE_INST_COUNT(SkBBoxHierarchy) | 
|  23  |  40  | 
 |  41     SkBBoxHierarchy() : fClient(NULL) {} | 
 |  42  | 
|  24     /** |  43     /** | 
|  25      * Insert a data pointer and corresponding bounding box |  44      * Insert a data pointer and corresponding bounding box | 
|  26      * @param data The data pointer, may be NULL |  45      * @param data The data pointer, may be NULL | 
|  27      * @param bounds The bounding box, should not be empty |  46      * @param bounds The bounding box, should not be empty | 
|  28      * @param defer Whether or not it is acceptable to delay insertion of this e
    lement (building up |  47      * @param defer Whether or not it is acceptable to delay insertion of this e
    lement (building up | 
|  29      *        an entire spatial data structure at once is often faster and produ
    ces better |  48      *        an entire spatial data structure at once is often faster and produ
    ces better | 
|  30      *        structures than repeated inserts) until flushDeferredInserts is ca
    lled or the first |  49      *        structures than repeated inserts) until flushDeferredInserts is ca
    lled or the first | 
|  31      *        search. |  50      *        search. | 
|  32      */ |  51      */ | 
|  33     virtual void insert(void* data, const SkIRect& bounds, bool defer = false) =
     0; |  52     virtual void insert(void* data, const SkIRect& bounds, bool defer = false) =
     0; | 
|  34  |  53  | 
|  35     /** |  54     /** | 
|  36      * If any insertions have been deferred, this forces them to be inserted |  55      * If any insertions have been deferred, this forces them to be inserted | 
|  37      */ |  56      */ | 
|  38     virtual void flushDeferredInserts() = 0; |  57     virtual void flushDeferredInserts() = 0; | 
|  39  |  58  | 
|  40     /** |  59     /** | 
|  41      * Populate 'results' with data pointers corresponding to bounding boxes tha
    t intersect 'query' |  60      * Populate 'results' with data pointers corresponding to bounding boxes tha
    t intersect 'query' | 
|  42      */ |  61      */ | 
|  43     virtual void search(const SkIRect& query, SkTDArray<void*>* results) = 0; |  62     virtual void search(const SkIRect& query, SkTDArray<void*>* results) = 0; | 
|  44  |  63  | 
|  45     virtual void clear() = 0; |  64     virtual void clear() = 0; | 
|  46  |  65  | 
|  47     /** |  66     /** | 
|  48      * Gets the number of insertions |  67      * Gets the number of insertions | 
|  49      */ |  68      */ | 
|  50     virtual int getCount() const = 0; |  69     virtual int getCount() const = 0; | 
|  51  |  70  | 
 |  71     /** | 
 |  72      * Rewinds all the most recently inserted data elements until an element | 
 |  73      * is encountered for which client->shouldRewind(data) returns false. May | 
 |  74      * not rewind elements that were inserted prior to the last call to | 
 |  75      * flushDeferredInserts. | 
 |  76      */ | 
 |  77     virtual void rewindInserts() = 0; | 
 |  78  | 
 |  79     void setClient(SkBBoxHierarchyClient* client) { fClient = client; } | 
 |  80  | 
 |  81 protected: | 
 |  82     SkBBoxHierarchyClient* fClient; | 
 |  83  | 
|  52 private: |  84 private: | 
|  53     typedef SkRefCnt INHERITED; |  85     typedef SkRefCnt INHERITED; | 
|  54 }; |  86 }; | 
|  55  |  87  | 
|  56 #endif |  88 #endif | 
| OLD | NEW |