15 #ifndef GEOS_INDEX_STRTREE_ABSTRACTSTRTREE_H
16 #define GEOS_INDEX_STRTREE_ABSTRACTSTRTREE_H
18 #include <geos/export.h>
20 #include <geos/index/strtree/AbstractNode.h>
57 ItemsListItem(
void* item_)
62 ItemsListItem(ItemsList* item_)
77 assert(t == item_is_geometry);
83 assert(t == item_is_list);
94 class ItemsList :
public std::vector<ItemsListItem> {
96 typedef std::vector<ItemsListItem> base_type;
99 delete_item(ItemsListItem& item)
101 if(ItemsListItem::item_is_list == item.t) {
109 std::for_each(begin(), end(), &ItemsList::delete_item);
114 push_back(
void* item)
116 this->base_type::push_back(ItemsListItem(item));
121 push_back_owned(ItemsList* itemList)
123 this->base_type::push_back(ItemsListItem(itemList));
159 virtual std::unique_ptr<BoundableList> sortBoundables(
const BoundableList* input) = 0;
161 bool remove(
const void* searchBounds,
AbstractNode& node,
void* item);
184 const void* bBounds) = 0;
192 std::vector <AbstractNode*>* nodes;
207 assert(!nodeList->empty());
220 virtual void insert(
const void* bounds,
void* item);
223 void query(
const void* searchBounds, std::vector<void*>& foundItems);
231 bool remove(
const void* itemEnv,
void* item);
233 std::unique_ptr<BoundableList> boundablesAtLevel(
int level);
236 std::size_t nodeCapacity;
258 nodeCapacity(newNodeCapacity)
260 assert(newNodeCapacity > 1);
264 compareDoubles(
double a,
double b)
270 return (a < b) ? true :
false;
273 virtual ~AbstractSTRtree();
294 virtual void query(
const void* searchBounds,
const AbstractNode* node, std::vector<void*>* matches);
A visitor for items in an index.
Definition: ItemVisitor.h:29
A node of the STR tree.
Definition: AbstractNode.h:44
A test for intersection between two bounds, necessary because subclasses of AbstractSTRtree have diff...
Definition: AbstractSTRtree.h:173
virtual bool intersects(const void *aBounds, const void *bBounds)=0
Base class for STRtree and SIRtree.
Definition: AbstractSTRtree.h:139
void iterate(ItemVisitor &visitor)
virtual void insert(const void *bounds, void *item)
Also builds the tree, if necessary.
void query(const void *searchBounds, ItemVisitor &visitor)
Also builds the tree, if necessary.
AbstractSTRtree(std::size_t newNodeCapacity)
Constructs an AbstractSTRtree with the specified maximum number of child nodes that a node may have.
Definition: AbstractSTRtree.h:253
bool remove(const void *itemEnv, void *item)
Also builds the tree, if necessary.
void query(const void *searchBounds, std::vector< void * > &foundItems)
Also builds the tree, if necessary.
virtual std::size_t getNodeCapacity()
Returns the maximum number of child nodes that a node may have.
Definition: AbstractSTRtree.h:289
virtual IntersectsOp * getIntersectsOp()=0
virtual std::unique_ptr< BoundableList > createParentBoundables(BoundableList *childBoundables, int newLevel)
Sorts the childBoundables then divides them into groups of size M, where M is the node capacity.
virtual void boundablesAtLevel(int level, AbstractNode *top, BoundableList *boundables)
ItemsList * itemsTree()
Gets a tree structure (as a nested list) corresponding to the structure of the items and nodes in thi...
virtual void build()
Creates parent nodes, grandparent nodes, and so forth up to the root node, for the data that has been...
std::vector< Boundable * > BoundableList
A list of boundables. TODO: use a list.
Definition: AbstractSTRtree.h:44
Basic namespace for all GEOS functionalities.
Definition: IndexedNestedRingTester.h:25