]>
git.ipfire.org Git - thirdparty/xfsprogs-dev.git/blob - include/radix-tree.h
1 // SPDX-License-Identifier: GPL-2.0+
3 * Copyright (C) 2001 Momchil Velikov
4 * Portions Copyright (C) 2001 Christoph Hellwig
6 #ifndef __XFS_SUPPORT_RADIX_TREE_H__
7 #define __XFS_SUPPORT_RADIX_TREE_H__
9 #define RADIX_TREE_TAGS
11 struct radix_tree_root
{
13 struct radix_tree_node
*rnode
;
16 #define RADIX_TREE_INIT(mask) { \
21 #define RADIX_TREE(name, mask) \
22 struct radix_tree_root name = RADIX_TREE_INIT(mask)
24 #define INIT_RADIX_TREE(root, mask) \
27 (root)->rnode = NULL; \
30 #ifdef RADIX_TREE_TAGS
31 #define RADIX_TREE_MAX_TAGS 2
34 int radix_tree_insert(struct radix_tree_root
*, unsigned long, void *);
35 void *radix_tree_lookup(struct radix_tree_root
*, unsigned long);
36 void **radix_tree_lookup_slot(struct radix_tree_root
*, unsigned long);
37 void *radix_tree_lookup_first(struct radix_tree_root
*, unsigned long *);
38 void *radix_tree_delete(struct radix_tree_root
*, unsigned long);
40 radix_tree_gang_lookup(struct radix_tree_root
*root
, void **results
,
41 unsigned long first_index
, unsigned int max_items
);
43 radix_tree_gang_lookup_ex(struct radix_tree_root
*root
, void **results
,
44 unsigned long first_index
, unsigned long last_index
,
45 unsigned int max_items
);
47 void radix_tree_init(void);
49 #ifdef RADIX_TREE_TAGS
50 void *radix_tree_tag_set(struct radix_tree_root
*root
,
51 unsigned long index
, unsigned int tag
);
52 void *radix_tree_tag_clear(struct radix_tree_root
*root
,
53 unsigned long index
, unsigned int tag
);
54 int radix_tree_tag_get(struct radix_tree_root
*root
,
55 unsigned long index
, unsigned int tag
);
57 radix_tree_gang_lookup_tag(struct radix_tree_root
*root
, void **results
,
58 unsigned long first_index
, unsigned int max_items
,
60 int radix_tree_tagged(struct radix_tree_root
*root
, unsigned int tag
);
63 #endif /* __XFS_SUPPORT_RADIX_TREE_H__ */