コード例 #1
0
ファイル: interval_tree.c プロジェクト: AK101111/linux
struct interval_node *interval_insert(struct interval_node *node,
				      struct interval_node **root)

{
	struct interval_node **p, *parent = NULL;

	LASSERT(!interval_is_intree(node));
	p = root;
	while (*p) {
		parent = *p;
		if (extent_equal(&parent->in_extent, &node->in_extent))
			return parent;

		/* max_high field must be updated after each iteration */
		if (parent->in_max_high < interval_high(node))
			parent->in_max_high = interval_high(node);

		if (extent_compare(&node->in_extent, &parent->in_extent) < 0)
			p = &parent->in_left;
		else
			p = &parent->in_right;
	}

	/* link node into the tree */
	node->in_parent = parent;
	node->in_color = INTERVAL_RED;
	node->in_left = NULL;
	node->in_right = NULL;
	*p = node;

	interval_insert_color(node, root);
	node->in_intree = 1;

	return NULL;
}
コード例 #2
0
ファイル: interval_tree.c プロジェクト: sdsc/lustre-release
int node_equal(struct interval_node *n1, struct interval_node *n2)
{
	return extent_equal(&n1->in_extent, &n2->in_extent);
}