このページを編集する際は、編集に関する方針に従ってください。

概要

引数

実装

/*

*	Extend a radix tree so it can store key @index.
*/

static int radix_tree_extend(struct radix_tree_root *root, unsigned long index) {

	struct radix_tree_node *node;
	unsigned int height;
	char tags[RADIX_TREE_TAGS];
	int tag;
	/* Figure out what the height should be.  */
	height = root->height + 1;
	while (index > radix_tree_maxindex(height))
		height++;
	if (root->rnode == NULL) {
		root->height = height;
		goto out;
	}
	/*
	 * Prepare the tag status of the top-level node for propagation
	 * into the newly-pushed top-level node(s)
	 */
	for (tag = 0; tag < RADIX_TREE_TAGS; tag++) {
		int idx;
		tags[tag] = 0;
		for (idx = 0; idx < RADIX_TREE_TAG_LONGS; idx++) {
			if (root->rnode->tags[tag][idx]) {
				tags[tag] = 1;
				break;
			}
		}
	}
	do {
		if (!(node = radix_tree_node_alloc(root)))
			return -ENOMEM;
		/* Increase the height.  */
		node->slots[0] = root->rnode;
		/* Propagate the aggregated tag info into the new root */
		for (tag = 0; tag < RADIX_TREE_TAGS; tag++) {
			if (tags[tag])
				tag_set(node, tag, 0);
		}
		node->count = 1;
		root->rnode = node;
		root->height++;
	} while (height > root->height);

out:

	return 0;

}

呼出元


履歴

  • 作者:ひら
  • 日付:2005/9/21
  • 対象:2.6.10
    更新日更新者更新内容

コメント



トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2009-11-24 (火) 07:17:29 (3129d)