~mdw
/
sgt
/
halibut
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Add an error check for correct formatting in Deflate uncompressed
[sgt/halibut]
/
tree234.c
diff --git
a/tree234.c
b/tree234.c
index
bc88039
..
26d188e
100644
(file)
--- a/
tree234.c
+++ b/
tree234.c
@@
-34,7
+34,7
@@
#define smalloc malloc
#define sfree free
#define smalloc malloc
#define sfree free
-#define
mk
new(typ) ( (typ *) smalloc (sizeof (typ)) )
+#define
s
new(typ) ( (typ *) smalloc (sizeof (typ)) )
#ifdef TEST
#define LOG(x) (printf x)
#ifdef TEST
#define LOG(x) (printf x)
@@
-60,7
+60,7
@@
struct node234_Tag {
* Create a 2-3-4 tree.
*/
tree234 *newtree234(cmpfn234 cmp) {
* Create a 2-3-4 tree.
*/
tree234 *newtree234(cmpfn234 cmp) {
- tree234 *ret =
mk
new(tree234);
+ tree234 *ret =
s
new(tree234);
LOG(("created tree %p\n", ret));
ret->root = NULL;
ret->cmp = cmp;
LOG(("created tree %p\n", ret));
ret->root = NULL;
ret->cmp = cmp;
@@
-187,7
+187,7
@@
static int add234_insert(node234 *left, void *e, node234 *right,
LOG((" done\n"));
break;
} else {
LOG((" done\n"));
break;
} else {
- node234 *m =
mk
new(node234);
+ node234 *m =
s
new(node234);
m->parent = n->parent;
LOG((" splitting a 4-node; created new node %p\n", m));
/*
m->parent = n->parent;
LOG((" splitting a 4-node; created new node %p\n", m));
/*
@@
-283,7
+283,7
@@
static int add234_insert(node234 *left, void *e, node234 *right,
return 0; /* root unchanged */
} else {
LOG((" root is overloaded, split into two\n"));
return 0; /* root unchanged */
} else {
LOG((" root is overloaded, split into two\n"));
- (*root) =
mk
new(node234);
+ (*root) =
s
new(node234);
(*root)->kids[0] = left; (*root)->counts[0] = lcount;
(*root)->elems[0] = e;
(*root)->kids[1] = right; (*root)->counts[1] = rcount;
(*root)->kids[0] = left; (*root)->counts[0] = lcount;
(*root)->elems[0] = e;
(*root)->kids[1] = right; (*root)->counts[1] = rcount;
@@
-314,7
+314,7
@@
static void *add234_internal(tree234 *t, void *e, int index) {
LOG(("adding element \"%s\" to tree %p\n", e, t));
if (t->root == NULL) {
LOG(("adding element \"%s\" to tree %p\n", e, t));
if (t->root == NULL) {
- t->root =
mk
new(node234);
+ t->root =
s
new(node234);
t->root->elems[1] = t->root->elems[2] = NULL;
t->root->kids[0] = t->root->kids[1] = NULL;
t->root->kids[2] = t->root->kids[3] = NULL;
t->root->elems[1] = t->root->elems[2] = NULL;
t->root->kids[0] = t->root->kids[1] = NULL;
t->root->kids[2] = t->root->kids[3] = NULL;
@@
-1040,7
+1040,7
@@
static node234 *join234_internal(node234 *left, void *sep,
* nodes.
*/
node234 *newroot;
* nodes.
*/
node234 *newroot;
- newroot =
mk
new(node234);
+ newroot =
s
new(node234);
newroot->kids[0] = left; newroot->counts[0] = countnode234(left);
newroot->elems[0] = sep;
newroot->kids[1] = right; newroot->counts[1] = countnode234(right);
newroot->kids[0] = left; newroot->counts[0] = countnode234(left);
newroot->elems[0] = sep;
newroot->kids[1] = right; newroot->counts[1] = countnode234(right);
@@
-1215,7
+1215,7
@@
static node234 *split234_internal(tree234 *t, int index) {
* new node pointers in halves[0] and halves[1], and go up
* a level.
*/
* new node pointers in halves[0] and halves[1], and go up
* a level.
*/
- sib =
mk
new(node234);
+ sib =
s
new(node234);
for (i = 0; i < 3; i++) {
if (i+ki < 3 && n->elems[i+ki]) {
sib->elems[i] = n->elems[i+ki];
for (i = 0; i < 3; i++) {
if (i+ki < 3 && n->elems[i+ki]) {
sib->elems[i] = n->elems[i+ki];
@@
-1415,7
+1415,7
@@
tree234 *split234(tree234 *t, void *e, cmpfn234 cmp, int rel) {
static node234 *copynode234(node234 *n, copyfn234 copyfn, void *copyfnstate) {
int i;
static node234 *copynode234(node234 *n, copyfn234 copyfn, void *copyfnstate) {
int i;
- node234 *n2 =
mk
new(node234);
+ node234 *n2 =
s
new(node234);
for (i = 0; i < 3; i++) {
if (n->elems[i] && copyfn)
for (i = 0; i < 3; i++) {
if (n->elems[i] && copyfn)
@@
-1440,8
+1440,11
@@
tree234 *copytree234(tree234 *t, copyfn234 copyfn, void *copyfnstate) {
tree234 *t2;
t2 = newtree234(t->cmp);
tree234 *t2;
t2 = newtree234(t->cmp);
- t2->root = copynode234(t->root, copyfn, copyfnstate);
- t2->root->parent = NULL;
+ if (t->root) {
+ t2->root = copynode234(t->root, copyfn, copyfnstate);
+ t2->root->parent = NULL;
+ } else
+ t2->root = NULL;
return t2;
}
return t2;
}
@@
-2122,11
+2125,12
@@
int main(void) {
tree = newtree234(mycmp);
cmp = mycmp;
arraylen = 0;
tree = newtree234(mycmp);
cmp = mycmp;
arraylen = 0;
- for (i = 0; i < 16; i++) {
- addtest(strings[i]);
+ for (i = 0; i < 17; i++) {
tree2 = copytree234(tree, NULL, NULL);
splittest(tree2, array, arraylen);
freetree234(tree2);
tree2 = copytree234(tree, NULL, NULL);
splittest(tree2, array, arraylen);
freetree234(tree2);
+ if (i < 16)
+ addtest(strings[i]);
}
freetree234(tree);
}
freetree234(tree);