for (it = keylist.rbegin(); it != end; ++it) {
p = ret;
ret = new BindingTree(id);
- if (!p) ret->chain = false;
+ if (!p) ret->chain = false; // only the first built node
ret->first_child = p;
if (!translate(*it, ret->binding, true)) {
destroytree(ret);
{
BindingTree *a, *b, *tmp, *last;
- printf("node=%lx\n", (long)node);
if (!_keytree.first_child) {
// there are no nodes at this level yet
_keytree.first_child = node;
last = a;
b = node;
while (a) {
- printf("in while.. b=%lx\n", (long)b);
last = a;
if (a->binding != b->binding) {
a = a->next_sibling;
a = a->first_child;
}
}
- printf("after while.. b=%lx\n", (long)b);
if (last->binding != b->binding)
last->next_sibling = b;
- else
+ else {
last->first_child = b->first_child;
- delete b;
+ delete b;
+ }
}
}
int OBBindings::find_key(BindingTree *search) const {
BindingTree *a, *b;
- print_branch(&_keytree, " Searching:");
- print_branch(search, " for...");
a = _keytree.first_child;
b = search;
while (a && b) {
} else {
if (a->chain == b->chain) {
if (!a->chain) {
- printf("Match found with %s\n", a->text.c_str());
return a->id; // found it! (return the actual id, not the search's)
}
} else {
- printf("Conflict found with %s\n", a->text.c_str());
return -2; // the chain status' don't match (conflict!)
}
b = b->first_child;
if (!(tree = buildtree(keylist, id)))
return false; // invalid binding requested
- print_branch(tree, " Adding: ");
-
if (find_key(tree) != -1) {
// conflicts with another binding
- printf("Conflict\n");
destroytree(tree);
return false;
}
// assimilate this built tree into the main tree
assimilate(tree); // assimilation destroys/uses the tree
- printf("Added!\n");
- print_branch(&_keytree, "");
- printf("\n");
-
return true;
}