Home | History | Annotate | Download | only in core
      1 
      2 /*
      3  * Copyright 2012 Google Inc.
      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 #ifndef SkBBoxHierarchy_DEFINED
     10 #define SkBBoxHierarchy_DEFINED
     11 
     12 #include "SkRect.h"
     13 #include "SkTDArray.h"
     14 #include "SkRefCnt.h"
     15 
     16 /**
     17  * Interface for a spatial data structure that associates user data pointers with axis-aligned
     18  * bounding boxes, and allows efficient retrieval of intersections with query rectangles.
     19  */
     20 class SkBBoxHierarchy : public SkRefCnt {
     21 public:
     22     SK_DECLARE_INST_COUNT(SkBBoxHierarchy)
     23 
     24     /**
     25      * Insert a data pointer and corresponding bounding box
     26      * @param data The data pointer, may be NULL
     27      * @param bounds The bounding box, should not be empty
     28      * @param defer Whether or not it is acceptable to delay insertion of this element (building up
     29      *        an entire spatial data structure at once is often faster and produces better
     30      *        structures than repeated inserts) until flushDeferredInserts is called or the first
     31      *        search.
     32      */
     33     virtual void insert(void* data, const SkIRect& bounds, bool defer = false) = 0;
     34 
     35     /**
     36      * If any insertions have been deferred, this forces them to be inserted
     37      */
     38     virtual void flushDeferredInserts() = 0;
     39 
     40     /**
     41      * Populate 'results' with data pointers corresponding to bounding boxes that intersect 'query'
     42      */
     43     virtual void search(const SkIRect& query, SkTDArray<void*>* results) = 0;
     44 
     45     virtual void clear() = 0;
     46 
     47     /**
     48      * Gets the number of insertions
     49      */
     50     virtual int getCount() const = 0;
     51 
     52 private:
     53     typedef SkRefCnt INHERITED;
     54 };
     55 
     56 #endif
     57