16 #ifndef GEOS_INDEX_STRTREE_ABSTRACTSTRTREE_H
17 #define GEOS_INDEX_STRTREE_ABSTRACTSTRTREE_H
19 #include <geos/export.h>
21 #include <geos/index/strtree/AbstractNode.h>
60 ItemsListItem(
void *item_)
65 ItemsListItem(ItemsList* item_)
71 type get_type()
const {
return t; }
73 void* get_geometry()
const
75 assert(t == item_is_geometry);
78 ItemsList* get_itemslist()
const
80 assert(t == item_is_list);
91 class ItemsList :
public std::vector<ItemsListItem>
94 typedef std::vector<ItemsListItem> base_type;
96 static void delete_item(ItemsListItem& item)
98 if (ItemsListItem::item_is_list == item.t)
105 std::for_each(begin(), end(), &ItemsList::delete_item);
109 void push_back(
void* item)
111 this->base_type::push_back(ItemsListItem(item));
115 void push_back_owned(ItemsList* itemList)
117 this->base_type::push_back(ItemsListItem(itemList));
153 virtual std::auto_ptr<BoundableList> sortBoundables(
const BoundableList* input)=0;
155 bool remove(
const void* searchBounds,
AbstractNode& node,
void* item);
177 virtual bool intersects(
const void* aBounds,
178 const void* bBounds)=0;
185 std::vector <AbstractNode *> *nodes;
194 virtual std::auto_ptr<BoundableList> createParentBoundables(
199 assert(!nodes->empty());
210 virtual void insert(
const void* bounds,
void* item);
213 void query(
const void* searchBounds, std::vector<void*>& foundItems);
217 std::vector<void*>* query(
const void* searchBounds) {
218 vector<void*>* matches =
new vector<void*>();
219 query(searchBounds, *matches);
224 void query(
const void* searchBounds, ItemVisitor& visitor);
226 void query(
const void* searchBounds,
const AbstractNode& node, ItemVisitor& visitor);
229 bool remove(
const void* itemEnv,
void* item);
231 std::auto_ptr<BoundableList> boundablesAtLevel(
int level);
234 std::size_t nodeCapacity;
242 virtual IntersectsOp *getIntersectsOp()=0;
256 nodeCapacity(newNodeCapacity)
258 assert(newNodeCapacity>1);
261 static bool compareDoubles(
double a,
double b) {
266 return ( a < b ) ?
true :
false;
269 virtual ~AbstractSTRtree();
277 virtual void build();
284 virtual void query(
const void* searchBounds,
const AbstractNode* node, std::vector<void*>* matches);
296 virtual void boundablesAtLevel(
int level,
AbstractNode* top,
313 ItemsList* itemsTree();
321 #endif // GEOS_INDEX_STRTREE_ABSTRACTSTRTREE_H