38 for (
size_t i = 0; i <
NODECARD; i++)
57 fprintf(stderr,
"node");
59 fprintf(stderr,
" LEAF");
60 else if (n->
level > 0)
61 fprintf(stderr,
" NONLEAF");
63 fprintf(stderr,
" TYPE=?");
64 fprintf(stderr,
" level=%d count=%d child address=%p\n",
67 for (
size_t i = 0; i <
NODECARD; i++) {
75 fprintf(stderr,
" child[%d] X%X\n", i, (
unsigned int) b->
child);
90 for (
size_t i = 0; i <
NODECARD; i++)
108 uint64_t bestIncr = 0;
109 uint64_t bestArea = 0;
111 bool bestSet =
false;
114 for (
int i = 0; i <
NODECARD; i++) {
119 uint64_t increase =
RectArea(rect) - area;
120 if (!bestSet || increase < bestIncr) {
125 }
else if (increase == bestIncr && area < bestArea) {
132 "i=%d area before=%" PRIu64
" area after=%" PRIu64
" increase=%" PRIu64
133 "\n", i, area, area + increase, increase);
138 fprintf(stderr,
"\tpicked %d\n", best);
175 assert(n && i >= 0 && i <
NODECARD);
Memory allocation wrappers that exit on failure.
static void * gv_alloc(size_t size)
Node_t * RTreeNewNode(void)
int AddBranch(RTree_t *rtp, Branch_t *b, Node_t *n, Node_t **new)
Rect_t NodeCover(Node_t *n)
void InitBranch(Branch_t *b)
void DisconBranch(Node_t *n, int i)
int PickBranch(Rect_t r, Node_t *n)
void PrintBranch(int, Branch_t *)
Rect_t CombineRect(const Rect_t r, const Rect_t rr)
uint64_t RectArea(const Rect_t r)
void SplitNode(RTree_t *rtp, Node_t *n, Branch_t *b, Node_t **nn)
struct Branch branch[NODECARD]