Esempio n. 1
0
File: prefix.c Progetto: taysom/tau
Lump_s prefix(Lump_s a, Lump_s b) {
	Lump_s	p;
	int	size;
	int	i;

#if 0
	int	cmp;
	cmp = cmplump(a, b);
	if (cmp > 0) {
		Lump_s	t = a;
		a = b;
		b = t;
	} else if (cmp == 0) {
		return a;
	}
#endif
	if (a.size > b.size) {
		size = b.size;
	} else {
		size = a.size;
	}
	for (i = 0; i < size; i++) {
		if (((u8 *)a.d)[i] != ((u8 *)b.d)[i]) {
			++i;
			break;
		}
	}
	p.size = i;
	p.d = b.d;
	return p;
}
Esempio n. 2
0
File: bitree.c Progetto: taysom/tau
int bi_insert (BiTree_s *tree, Rec_s r)
{
	BiNode_s **np = &tree->root;
	for (;;) {
		BiNode_s *node = *np;
		if (!node) break;
		if (cmplump(r.key, node->rec.key) < 0) {
			np = &node->left;
		} else {
			np = &node->right;
		}
	}
	*np = bi_new(r);
	return 0;
}
Esempio n. 3
0
File: bitest.c Progetto: wtaysom/tau
void find_find (Lump_s key, Lump_s val, void *user)
{
	BiTree_s *tree = user;
	Lump_s fval;
	int rc;

	rc = bi_find(tree, key, &fval);
	if (rc) {
		fatal("Didn't find %s : rc=%d", key.d, rc);
	} else if (cmplump(val, fval) != 0) {
		fatal("Val not the same %s!=%s", val.d, fval.d);
	} else {
		printf("%s:%s\n", key.d, fval.d);
	}
	freelump(fval);
}
Esempio n. 4
0
File: bitree.c Progetto: taysom/tau
int bi_delete (BiTree_s *tree, Lump_s key)
{
	BiNode_s **np = &tree->root;
	for (;;) {
		BiNode_s *node = *np;
		if (!node) fatal("Key not found");
		int r = cmplump(key, node->rec.key);
		if (r == 0) break;
		if (r < 0) {
			np = &node->left;
		} else {
			np = &node->right;
		}
	}
	delete_node(np);
	return 0;
}
Esempio n. 5
0
File: bitree.c Progetto: taysom/tau
int bi_find (BiTree_s *tree, Lump_s key, Lump_s *val)
{
	BiNode_s *node = tree->root;
	while (node) {
		int r = cmplump(key, node->rec.key);
		if (r == 0) {
			*val = node->rec.val;
			return 0;
		}
		if (r < 0) {
			node = node->left;
		} else {
			node = node->right;
		}
	}
	return -1;
}
Esempio n. 6
0
File: bitree.c Progetto: taysom/tau
void bi_pr_path (BiTree_s *tree, Lump_s key)
{
	BiNode_s *node = tree->root;
	while (node) {
		pr_lump(node->rec.key);
		int r = cmplump(key, node->rec.key);
		if (r == 0) {
			printf("\n");
			return;
		}
		printf(" ");
		if (r < 0) {
			node = node->left;
		} else {
			node = node->right;
		}
	}
}