示例#1
0
文件: rule.c 项目: liangxiao/scws
void scws_rule_free(rule_t r)
{
	if (r)
	{
		rule_attr_t a, b;

		xtree_free(r->tree);

		a = r->attr;
		while (a != NULL)
		{
			b = a;
			a = b->next;
			free(b);			
		}

		free(r);
	}
}
示例#2
0
文件: xdict.c 项目: digoal/pg_scws
/* close the dict */
void xdict_close(xdict_t xd)
{
	xdict_t xx;

	while ((xx = xd) != NULL)
	{
		xd = xx->next;
		xx->ref--;
		if (xx->ref == 0)
		{
			if (xx->xmode == SCWS_XDICT_MEM)
				xtree_free((xtree_t) xx->xdict);
			else
			{
				xdb_close((xdb_t) xx->xdict);
			}
			free(xx);
		}
	}
}
示例#3
0
文件: xtree-test.c 项目: BYUHPC/slurm
static void teardown(void)
{
    xtree_free(&mytree_empty);
    xtree_free(&mytree_by_addchild);
}
/* here we construct a tree in the following form :
 *       1
 *    / / \  \
 *    6 2  3  5
 *     / \
 *     7  4
 * numbers are chronological adding order.
 */
void addchild_walk_test()
{
	xtree_t *my_tree = (xtree_t *)xmalloc(sizeof(xtree_t));
	person_t *person = NULL;
	person_t *direct_parent_person = NULL;
	person_t *parent_of_delete_person = NULL;
	char buf[256];
	xtree_node_t* node = NULL;
	xtree_node_t* direct_parent_node = NULL;
	xtree_node_t* parent_of_delete_node = NULL;
	uint32_t arg = 0;
	int i;

	/* init my_tree with free element function */
	xtree_init(my_tree, xtree_free_node_func);

	for (i = 1; i < 8; i++) {
		person = (person_t *)xmalloc(sizeof(person_t));
		person->id = i;
		person->age = i;
		snprintf(buf, 256, "name_%d", i);
		person->name = xstrdup(buf);

		if (1 == i)
			xtree_add_child(my_tree, NULL, person, XTREE_APPEND);
		else if (2 == i)
			xtree_add_child(my_tree, my_tree->root, person, XTREE_APPEND);
		else if (3 == i)
			xtree_add_child(my_tree, my_tree->root, person, XTREE_APPEND);
		else if (4 == i) /* my_tree->root is 1, then 1's ->start is 2 */
			xtree_add_child(my_tree, my_tree->root->start, person, XTREE_APPEND);
		else if (5 == i)
			xtree_add_child(my_tree, my_tree->root, person, XTREE_APPEND);
		else if (6 == i)
			xtree_add_child(my_tree, my_tree->root, person, XTREE_PREPEND);
		else if (7 == i) /* my_tree->root is 1, then 1's ->start is 2 */ /* XTREE_PREPEND */
			xtree_add_child(my_tree, my_tree->root->start->next, person, XTREE_PREPEND);
	}

	arg = 4;
	node = xtree_find(my_tree, find_compare_func, &arg);

	if (NULL != node) {
		person = (person_t *) node->data;
		puts("xtree_find success!, my info: ");
		printf("person->id = %lu\n", person->id);
		printf("person->age = %lu\n", person->age);
		printf("person->name = %s\n", person->name);
		/* print person's depth */
		printf("person\'s depth = %lu\n", xtree_node_depth(node));

		puts("my parent\'s info: ");
		direct_parent_node = xtree_get_parent(my_tree, node);
		direct_parent_person = (person_t *) direct_parent_node->data;
		printf("direct_parent_person->id = %lu\n", direct_parent_person->id);
		printf("direct_parent_person->age = %lu\n", direct_parent_person->age);
		printf("direct_parent_person->name = %s\n", direct_parent_person->name);
		/* print parent's depth */
		printf("parent's depth = %lu\n", xtree_node_depth(direct_parent_person));

		puts("try to delete the parent node (2):");
		parent_of_delete_node = xtree_delete(my_tree, direct_parent_node);
		parent_of_delete_person = (person_t *)parent_of_delete_node->data;
		printf("parent_of_delete_person->id = %lu\n", parent_of_delete_person->id);
		printf("parent_of_delete_person->age = %lu\n", parent_of_delete_person->age);
		printf("parent_of_delete_person->name = %s\n", parent_of_delete_person->name);
	}

	puts("at last, free all nodes in the tree:");
	/* to free element */
	xtree_free(my_tree);
	/* to free my_tree itself memory */
	xfree(my_tree);
}