1 /* 2 * Copyright 2012 Google Inc. 3 * 4 * Use of this source code is governed by a BSD-style license that can be 5 * found in the LICENSE file. 6 */ 7 8 #ifndef SkBBoxHierarchy_DEFINED 9 #define SkBBoxHierarchy_DEFINED 10 11 #include "SkRect.h" 12 #include "SkRefCnt.h" 13 #include "SkTDArray.h" 14 #include "SkTemplates.h" 15 16 /** 17 * Interface for a spatial data structure that stores axis-aligned bounding 18 * boxes and allows efficient retrieval of intersections with query rectangles. 19 */ 20 class SkBBoxHierarchy : public SkRefCnt { 21 public: SkBBoxHierarchy()22 SkBBoxHierarchy() {} ~SkBBoxHierarchy()23 virtual ~SkBBoxHierarchy() {} 24 25 /** 26 * Insert N bounding boxes into the hierarchy. 27 */ 28 virtual void insert(const SkRect[], int N) = 0; 29 30 /** 31 * Populate results with the indices of bounding boxes interesecting that query. 32 */ 33 virtual void search(const SkRect& query, SkTDArray<unsigned>* results) const = 0; 34 35 virtual size_t bytesUsed() const = 0; 36 37 // Get the root bound. 38 virtual SkRect getRootBound() const = 0; 39 40 SK_DECLARE_INST_COUNT(SkBBoxHierarchy) 41 private: 42 typedef SkRefCnt INHERITED; 43 }; 44 45 #endif 46