40 fprintf(stderr,
"Splitting:\n");
42 fprintf(stderr,
"new branch:\n");
53 for (
size_t i = 0; i <
NODECARD + 1; i++) {
68 (*nn)->level = n->
level = level;
74 fprintf(stderr,
"group 0:\n");
76 fprintf(stderr,
"group 1:\n");
78 fprintf(stderr,
"\n");
92 for (
size_t i = 0; i <
NODECARD; i++) {
100 for (
size_t i = 1; i <
NODECARD + 1; i++) {
124 int group, chosen = 0, betterGroup = 0;
133 bool biggestDiffSet =
false;
134 uint64_t biggestDiff = 0;
135 for (
int i = 0; i <
NODECARD + 1; i++) {
143 if (growth1 >= growth0) {
144 diff = growth1 - growth0;
147 diff = growth0 - growth1;
151 if (!biggestDiffSet || diff > biggestDiff) {
153 biggestDiffSet =
true;
156 }
else if (diff == biggestDiff &&
173 for (
int i = 0; i <
NODECARD + 1; i++) {
191 int seed0 = 0, seed1 = 0;
194 for (
int i = 0; i <
NODECARD + 1; i++)
198 for (
int i = 0; i <
NODECARD; i++) {
199 for (
int j = i + 1; j <
NODECARD + 1; j++) {
242 MFBSetColor(group + 3);
243 for (j = 0; j <
NODECARD + 1; j++) {
246 PrintRect(&rtrtp->split.Partitions[0].BranchBuf[j].rect);
260 for (
size_t i = 0; i <
NODECARD + 1; i++) {
281 for (
size_t i = 0; i <
NODECARD + 1; i++) {
294 fprintf(stderr,
"\npartition:\n");
295 for (
size_t i = 0; i <
NODECARD + 1; i++) {
296 fprintf(stderr,
"%3zu\t", i);
298 fprintf(stderr,
"\n");
299 for (
size_t i = 0; i <
NODECARD + 1; i++) {
301 fprintf(stderr,
" t\t");
303 fprintf(stderr,
"\t");
305 fprintf(stderr,
"\n");
306 for (
size_t i = 0; i <
NODECARD + 1; i++) {
309 fprintf(stderr,
"\n");
311 fprintf(stderr,
"count[0] = %d area = %" PRIu64
"\n",
314 fprintf(stderr,
"count[1] = %d area = %" PRIu64
"\n",
319 fprintf(stderr,
"total area = %" PRIu64
" effectiveness = %3.2f\n",
326 fprintf(stderr,
"cover[0]:\n");
329 fprintf(stderr,
"cover[1]:\n");
Node_t * RTreeNewNode(void)
int AddBranch(RTree_t *rtp, Branch_t *b, Node_t *n, Node_t **new)
void PrintBranch(int, Branch_t *)
Rect_t CombineRect(const Rect_t *r, const Rect_t *rr)
uint64_t RectArea(const Rect_t *r)
static void GetBranches(RTree_t *rtp, Node_t *n, Branch_t *b)
static void Classify(RTree_t *rtp, int i, int group)
void SplitNode(RTree_t *rtp, Node_t *n, Branch_t *b, Node_t **nn)
static void MethodZero(RTree_t *rtp)
static void LoadNodes(RTree_t *rtp, Node_t *n, Node_t *q)
static void InitPVars(RTree_t *rtp)
static void PickSeeds(RTree_t *rtp)
struct Branch branch[NODECARD]
int partition[NODECARD+1]
struct PartitionVars Partitions[METHODS]
struct Branch BranchBuf[NODECARD+1]