38 if (
t->free_nodes.avail >=
t->free_nodes.alloc) {
41 t->free_nodes.alloc += 100;
42 size =
t->free_nodes.alloc *
sizeof(
off_t);
43 t->free_nodes.pos = (
off_t *)
realloc((
void *)
t->free_nodes.pos, size);
46 t->free_nodes.pos[
t->free_nodes.avail++] = pos;
55 which =
t->used[level][i];
56 t->nb[level][which].pos = -1;
57 t->nb[level][which].dirty = 0;
64 t->nb[level][
t->used[level][i + 1]].pos != -1) {
65 t->used[level][i] =
t->used[level][i + 1];
69 t->used[level][i] = which;
76 if (
t->free_nodes.avail > 0) {
77 t->free_nodes.avail--;
90 size +=
read(
t->fd,
b->rect.boundary,
t->rectsize);
107 size +=
read(
t->fd, &(n->
count),
sizeof(
int));
108 size +=
read(
t->fd, &(n->
level),
sizeof(
int));
110 for (i = 0; i <
MAXCARD; i++) {
127 which =
t->used[
level][i];
131 if (
t->nb[
level][which].dirty) {
134 t->nb[
level][which].dirty = 0;
143 t->used[
level][0] = which;
149 t->used[
level][0] = which;
155 return &(
t->nb[
level][which].n);
163 if (
write(
t->fd,
b->rect.boundary,
t->rectsize) !=
t->rectsize)
183 if (
write(
t->fd, &(n->
count),
sizeof(
int)) !=
sizeof(
int))
192 for (i = 0; i <
MAXCARD; i++) {
224 which =
t->used[n->
level][i];
226 t->nb[n->
level][which].dirty = 1;
232 t->used[n->
level][0] = which;
238 t->used[n->
level][0] = which;
248 for (i = 0; i <=
t->rootlevel; i++) {
250 if (
t->nb[i][
j].dirty) {
252 t->nb[i][
j].dirty = 0;
void void void void G_fatal_error(const char *,...) __attribute__((format(printf
off_t RTreeGetNodePos(struct RTree *t)
void RTreeNodeChanged(struct RTree_Node *n, off_t nodepos, struct RTree *t)
size_t RTreeWriteBranch(struct RTree_Branch *b, struct RTree *t)
size_t RTreeReadNode(struct RTree_Node *n, off_t nodepos, struct RTree *t)
void RTreeFlushBuffer(struct RTree *t)
size_t RTreeWriteNode(struct RTree_Node *n, struct RTree *t)
size_t RTreeRewriteNode(struct RTree_Node *n, off_t nodepos, struct RTree *t)
struct RTree_Node * RTreeGetNode(off_t nodepos, int level, struct RTree *t)
void RTreeAddNodePos(off_t pos, int level, struct RTree *t)
size_t RTreeReadBranch(struct RTree_Branch *b, struct RTree *t)
#define assert(condition)
struct RTree_Branch * branch
SYMBOL * err(FILE *fp, SYMBOL *s, char *msg)