123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118 |
- /****************************************************************************
- * MODULE: R-Tree library
- *
- * AUTHOR(S): Antonin Guttman - original code
- * Daniel Green (green@superliminal.com) - major clean-up
- * and implementation of bounding spheres
- * Markus Metz - file-based and memory-based R*-tree
- *
- * PURPOSE: Multidimensional index
- *
- * COPYRIGHT: (C) 2010 by the GRASS Development Team
- *
- * This program is free software under the GNU General Public
- * License (>=v2). Read the file COPYING that comes with GRASS
- * for details.
- *****************************************************************************/
- #ifndef _R_TREE_INDEX_H_
- #define _R_TREE_INDEX_H_
- #include "rtree.h"
- /* internal definitions and functions */
- /* PGSIZE is normally the natural page size of the machine */
- #define PGSIZE 512
- /* R*-tree: number of branches to be force-reinserted when adding a branch */
- #define FORCECARD 3
- #define NODETYPE(l, fd) ((l) == 0 ? 0 : ((fd) < 0 ? 1 : 2))
- struct RTree_ListNode
- {
- struct RTree_ListNode *next;
- struct RTree_Node *node;
- };
- struct RTree_ListFNode
- {
- struct RTree_ListFNode *next;
- off_t node_pos;
- };
- struct RTree_ListBranch
- {
- struct RTree_ListBranch *next;
- struct RTree_Branch b;
- int level;
- };
- /* functions */
- /* index.c */
- struct RTree_ListNode *RTreeNewListNode(void);
- void RTreeFreeListNode(struct RTree_ListNode *);
- void RTreeReInsertNode(struct RTree_Node *, struct RTree_ListNode **);
- void RTreeFreeListBranch(struct RTree_ListBranch *);
- /* indexm.c */
- int RTreeSearchM(struct RTree *, struct RTree_Rect *,
- SearchHitCallback *, void *);
- int RTreeInsertRectM(struct RTree_Rect *, union RTree_Child, int, struct RTree *);
- int RTreeDeleteRectM(struct RTree_Rect *, union RTree_Child, struct RTree *);
- int RTreeValidChildM(union RTree_Child *child);
- /* indexf.c */
- int RTreeSearchF(struct RTree *, struct RTree_Rect *,
- SearchHitCallback *, void *);
- int RTreeInsertRectF(struct RTree_Rect *, union RTree_Child, int, struct RTree *);
- int RTreeDeleteRectF(struct RTree_Rect *, union RTree_Child, struct RTree *);
- int RTreeValidChildF(union RTree_Child *);
- /* node.c */
- void RTreeNodeCover(struct RTree_Node *, struct RTree_Rect *, struct RTree *);
- int RTreeAddBranch(struct RTree_Branch *, struct RTree_Node *, struct RTree_Node **,
- struct RTree_ListBranch **, struct RTree_Rect *, char *, struct RTree *);
- int RTreePickBranch(struct RTree_Rect *, struct RTree_Node *, struct RTree *);
- void RTreeDisconnectBranch(struct RTree_Node *, int, struct RTree *);
- void RTreePrintNode(struct RTree_Node *, int, struct RTree *);
- void RTreeTabIn(int);
- void RTreeCopyBranch(struct RTree_Branch *, struct RTree_Branch *, struct RTree *);
- /* rect.c */
- void RTreeInitRect(struct RTree_Rect *, struct RTree *);
- void RTreeNullRect(struct RTree_Rect *, struct RTree *);
- RectReal RTreeRectArea(struct RTree_Rect *, struct RTree *);
- RectReal RTreeRectSphericalVolume(struct RTree_Rect *, struct RTree *);
- RectReal RTreeRectVolume(struct RTree_Rect *, struct RTree *);
- RectReal RTreeRectMargin(struct RTree_Rect *, struct RTree *);
- void RTreeCombineRect(struct RTree_Rect *, struct RTree_Rect *, struct RTree_Rect *, struct RTree *);
- int RTreeExpandRect(struct RTree_Rect *, struct RTree_Rect *, struct RTree *);
- int RTreeCompareRect(struct RTree_Rect *, struct RTree_Rect *, struct RTree *);
- /*-----------------------------------------------------------------------------
- | Copy second rectangle to first rectangle.
- -----------------------------------------------------------------------------*/
- #define RTreeCopyRect(r1, r2, t) memcpy((r1)->boundary, (r2)->boundary, (t)->rectsize)
- /* split.c */
- void RTreeSplitNode(struct RTree_Node *, struct RTree_Branch *, struct RTree_Node *, struct RTree *);
- /* card.c */
- int RTreeSetNodeMax(int, struct RTree *);
- int RTreeSetLeafMax(int, struct RTree *);
- int RTreeGetNodeMax(struct RTree *);
- int RTreeGetLeafMax(struct RTree *);
- /* io.c */
- struct RTree_Node *RTreeGetNode(off_t, int, struct RTree *);
- void RTreeNodeChanged(struct RTree_Node *, off_t , struct RTree *);
- size_t RTreeRewriteNode(struct RTree_Node *, off_t, struct RTree *);
- void RTreeAddNodePos(off_t, int, struct RTree *);
- #endif /* _INDEX_ */
|