~mdw
/
sgt
/
agedu
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Tinker slightly with the interaction of progress reports and error
[sgt/agedu]
/
index.c
diff --git
a/index.c
b/index.c
index
53f1000
..
3431d98
100644
(file)
--- a/
index.c
+++ b/
index.c
@@
-2,13
+2,10
@@
* index.c: Implementation of index.h.
*/
* index.c: Implementation of index.h.
*/
-#include <assert.h>
-#include <stdio.h>
-#include <stddef.h>
-
+#include "agedu.h"
#include "trie.h"
#include "index.h"
#include "trie.h"
#include "index.h"
-#include "
m
alloc.h"
+#include "alloc.h"
#define alignof(typ) ( offsetof(struct { char c; typ t; }, t) )
#define alignof(typ) ( offsetof(struct { char c; typ t; }, t) )
@@
-139,7
+136,7
@@
static void avl_fix(indexbuild *ib, struct avlnode *n)
MAXDEPTH(NODE(ib->t, n->children[1])));
n->totalsize =
MAXDEPTH(NODE(ib->t, n->children[1])));
n->totalsize =
- (ELEMENT(ib->t, n->element)->
blocks
+
+ (ELEMENT(ib->t, n->element)->
size
+
(n->children[0] ? NODE(ib->t, n->children[0])->totalsize : 0) +
(n->children[1] ? NODE(ib->t, n->children[1])->totalsize : 0));
}
(n->children[0] ? NODE(ib->t, n->children[0])->totalsize : 0) +
(n->children[1] ? NODE(ib->t, n->children[1])->totalsize : 0));
}
@@
-261,7
+258,13
@@
void indexbuild_add(indexbuild *ib, const struct trie_file *tf)
{
off_t node = OFFSET(ib->t, tf);
ib->currroot = avl_insert(ib, ib->currroot, node);
{
off_t node = OFFSET(ib->t, tf);
ib->currroot = avl_insert(ib, ib->currroot, node);
- ib->roots[ib->n++] = OFFSET(ib->t, ib->currroot);
+ ib->roots[ib->n++] = 0;
+}
+
+void indexbuild_tag(indexbuild *ib)
+{
+ if (ib->n > 0)
+ ib->roots[ib->n - 1] = OFFSET(ib->t, ib->currroot);
ib->firstmutable = ib->nodes + ib->nnodes;
}
ib->firstmutable = ib->nodes + ib->nnodes;
}
@@
-272,6
+275,7
@@
off_t indexbuild_realsize(indexbuild *ib)
void indexbuild_free(indexbuild *ib)
{
void indexbuild_free(indexbuild *ib)
{
+ assert(ib->n == trie_count(ib->t));
sfree(ib);
}
sfree(ib);
}
@@
-290,6
+294,7
@@
unsigned long long index_query(const void *t, int n, unsigned long long at)
if (n > count)
n = count;
if (n > count)
n = count;
+ assert(roots[n-1]);
node = NODE(t, roots[n-1]);
ret = 0;
node = NODE(t, roots[n-1]);
ret = 0;
@@
-304,7
+309,7
@@
unsigned long long index_query(const void *t, int n, unsigned long long at)
} else {
if (left)
ret += left->totalsize;
} else {
if (left)
ret += left->totalsize;
- ret += tf->
blocks
;
+ ret += tf->
size
;
node = right;
}
}
node = right;
}
}
@@
-321,6
+326,7
@@
unsigned long long index_order_stat(const void *t, double f)
roots = (const off_t *)((const char *)t + trie_get_index_offset(t));
count = trie_count(t);
roots = (const off_t *)((const char *)t + trie_get_index_offset(t));
count = trie_count(t);
+ assert(roots[count-1]);
node = NODE(t, roots[count-1]);
size = node->totalsize * f;
node = NODE(t, roots[count-1]);
size = node->totalsize * f;
@@
-334,12
+340,12
@@
unsigned long long index_order_stat(const void *t, double f)
if (left && size < left->totalsize) {
node = left;
} else if (!right ||
if (left && size < left->totalsize) {
node = left;
} else if (!right ||
- size < (left ? left->totalsize : 0) + tf->
blocks
) {
+ size < (left ? left->totalsize : 0) + tf->
size
) {
return tf->atime;
} else {
if (left)
size -= left->totalsize;
return tf->atime;
} else {
if (left)
size -= left->totalsize;
- size -= tf->
blocks
;
+ size -= tf->
size
;
node = right;
}
}
node = right;
}
}