![]() |
Eclipse SUMO - Simulation of Urban MObility
|
#include <RTree.h>
Data Structures | |
struct | Branch |
class | Iterator |
Iterator is not remove safe. More... | |
struct | ListNode |
A link list of nodes for reinsertion after a delete operation. More... | |
struct | Node |
Node for each branch level. More... | |
struct | PartitionVars |
Variables for finding a split partition. More... | |
struct | Rect |
Minimal bounding rectangle (n-dimensional) More... | |
Public Types | |
enum | { MAXNODES = TMAXNODES , MINNODES = TMINNODES } |
typedef void(DATATYPENP::* | Operation) (const CONTEXT &) const |
Public Member Functions | |
int | Count () |
Count the data elements in this container. This is slow as no internal counter is maintained. | |
DATATYPE & | GetAt (Iterator &a_it) |
Get object at iterator position. | |
void | GetFirst (Iterator &a_it) |
Get 'first' for iteration. | |
void | GetNext (Iterator &a_it) |
Get Next for iteration. | |
virtual void | Insert (const ELEMTYPE a_min[NUMDIMS], const ELEMTYPE a_max[NUMDIMS], const DATATYPE &a_dataId) |
bool | IsNull (Iterator &a_it) |
Is iterator NULL, or at end? | |
virtual void | Remove (const ELEMTYPE a_min[NUMDIMS], const ELEMTYPE a_max[NUMDIMS], const DATATYPE &a_dataId) |
void | RemoveAll () |
DK 15.10.2008 - end. | |
RTree (Operation operation) | |
virtual int | Search (const ELEMTYPE a_min[NUMDIMS], const ELEMTYPE a_max[NUMDIMS], const CONTEXT &c) const |
DK 15.10.2008 - begin. | |
virtual | ~RTree () |
Protected Member Functions | |
bool | AddBranch (Branch *a_branch, Node *a_node, Node **a_newNode) |
ListNode * | AllocListNode () |
Node * | AllocNode () |
ELEMTYPEREAL | CalcRectVolume (Rect *a_rect) |
void | ChoosePartition (PartitionVars *a_parVars, int a_minFill) |
void | Classify (int a_index, int a_group, PartitionVars *a_parVars) |
Rect | CombineRect (Rect *a_rectA, Rect *a_rectB) |
void | CountRec (Node *a_node, int &a_count) |
void | DisconnectBranch (Node *a_node, int a_index) |
void | FreeListNode (ListNode *a_listNode) |
void | FreeNode (Node *a_node) |
void | GetBranches (Node *a_node, Branch *a_branch, PartitionVars *a_parVars) |
void | InitNode (Node *a_node) |
void | InitParVars (PartitionVars *a_parVars, int a_maxRects, int a_minFill) |
void | InitRect (Rect *a_rect) |
bool | InsertRect (Rect *a_rect, const DATATYPE &a_id, Node **a_root, int a_level) |
bool | InsertRectRec (Rect *a_rect, const DATATYPE &a_id, Node *a_node, Node **a_newNode, int a_level) |
void | LoadNodes (Node *a_nodeA, Node *a_nodeB, PartitionVars *a_parVars) |
Rect | NodeCover (Node *a_node) |
bool | Overlap (Rect *a_rectA, Rect *a_rectB) const |
int | PickBranch (Rect *a_rect, Node *a_node) |
void | PickSeeds (PartitionVars *a_parVars) |
ELEMTYPEREAL | RectSphericalVolume (Rect *a_rect) |
ELEMTYPEREAL | RectVolume (Rect *a_rect) |
void | ReInsert (Node *a_node, ListNode **a_listNode) |
void | RemoveAllRec (Node *a_node) |
bool | RemoveRect (Rect *a_rect, const DATATYPE &a_id, Node **a_root) |
bool | RemoveRectRec (Rect *a_rect, const DATATYPE &a_id, Node *a_node, ListNode **a_listNode) |
void | Reset () |
bool | Search (Node *a_node, Rect *a_rect, int &a_foundCount, const CONTEXT &c) const |
void | SplitNode (Node *a_node, Branch *a_branch, Node **a_newNode) |
Protected Attributes | |
Node * | m_root |
Root of tree. | |
ELEMTYPEREAL | m_unitSphereVolume |
Unit sphere constant for required number of dimensions. | |
Operation | myOperation |
Implementation of RTree, a multidimensional bounding rectangle tree. Example usage: For a 3-dimensional tree use RTree<Object*, float, 3> myTree;
This modified, templated C++ version by Greg Douglas at Auran (http://www.auran.com)
DATATYPE Referenced data, should be int, void*, obj* etc. no larger than sizeof<void*> and simple type ELEMTYPE Type of element such as int or float NUMDIMS Number of dimensions such as 2 or 3 ELEMTYPEREAL Type of element that allows fractional and large values such as float or double, for use in volume calcs
NOTES: Inserting and removing data requires the knowledge of its constant Minimal Bounding Rectangle. This version uses new/delete for nodes, I recommend using a fixed size allocator for efficiency. Instead of using a callback function for returned results, I recommend and efficient pre-sized, grow-only memory array similar to MFC CArray or STL Vector for returning search query result.
typedef void(DATATYPENP::* RTree< DATATYPE, DATATYPENP, ELEMTYPE, NUMDIMS, CONTEXT, ELEMTYPEREAL, TMAXNODES, TMINNODES >::Operation) (const CONTEXT &) const |
RTree< DATATYPE, DATATYPENP, ELEMTYPE, NUMDIMS, CONTEXT, ELEMTYPEREAL, TMAXNODES, TMINNODES >::RTree | ( | Operation | operation | ) |
|
virtual |
|
protected |
|
protected |
|
protected |
|
protected |
|
protected |
|
protected |
|
protected |
int RTree< DATATYPE, DATATYPENP, ELEMTYPE, NUMDIMS, CONTEXT, ELEMTYPEREAL, TMAXNODES, TMINNODES >::Count | ( | ) |
Count the data elements in this container. This is slow as no internal counter is maintained.
|
protected |
|
protected |
|
protected |
|
protected |
|
inline |
|
protected |
|
inline |
Get 'first' for iteration.
Definition at line 246 of file RTree.h.
References RTree< DATATYPE, DATATYPENP, ELEMTYPE, NUMDIMS, CONTEXT, ELEMTYPEREAL, TMAXNODES, TMINNODES >::Iterator::FindNextData(), RTree< DATATYPE, DATATYPENP, ELEMTYPE, NUMDIMS, CONTEXT, ELEMTYPEREAL, TMAXNODES, TMINNODES >::Iterator::Init(), RTree< DATATYPE, DATATYPENP, ELEMTYPE, NUMDIMS, CONTEXT, ELEMTYPEREAL, TMAXNODES, TMINNODES >::Node::m_count, RTree< DATATYPE, DATATYPENP, ELEMTYPE, NUMDIMS, CONTEXT, ELEMTYPEREAL, TMAXNODES, TMINNODES >::m_root, and RTree< DATATYPE, DATATYPENP, ELEMTYPE, NUMDIMS, CONTEXT, ELEMTYPEREAL, TMAXNODES, TMINNODES >::Iterator::Push().
|
inline |
|
protected |
|
protected |
|
protected |
|
virtual |
Insert entry
a_min | Min of bounding rect |
a_max | Max of bounding rect |
a_dataId | Positive Id of data. Maybe zero, but negative numbers not allowed. |
|
protected |
|
protected |
|
inline |
|
protected |
|
protected |
|
protected |
|
protected |
|
protected |
|
protected |
|
protected |
|
protected |
|
virtual |
Remove entry
a_min | Min of bounding rect |
a_max | Max of bounding rect |
a_dataId | Positive Id of data. Maybe zero, but negative numbers not allowed. |
void RTree< DATATYPE, DATATYPENP, ELEMTYPE, NUMDIMS, CONTEXT, ELEMTYPEREAL, TMAXNODES, TMINNODES >::RemoveAll | ( | ) |
DK 15.10.2008 - end.
Remove all entries from tree
|
protected |
|
protected |
|
protected |
|
protected |
|
virtual |
DK 15.10.2008 - begin.
Find all within search rectangle
a_min | Min of search bounding rect |
a_max | Max of search bounding rect |
a_searchResult | Search result array. Caller should set grow size. Function will reset, not append to array. |
a_resultCallback | Callback function to return result. Callback should return 'true' to continue searching |
a_context | User context to pass as parameter to a_resultCallback |
|
protected |
|
protected |
|
protected |
Root of tree.
Definition at line 359 of file RTree.h.
Referenced by RTree< DATATYPE, DATATYPENP, ELEMTYPE, NUMDIMS, CONTEXT, ELEMTYPEREAL, TMAXNODES, TMINNODES >::GetFirst().
|
protected |