]> git.ipfire.org Git - thirdparty/xfsprogs-dev.git/blame - libfrog/radix-tree.h
libfrog: fix workqueue error communication problems
[thirdparty/xfsprogs-dev.git] / libfrog / radix-tree.h
CommitLineData
959ef981 1// SPDX-License-Identifier: GPL-2.0+
e9416bd3
DC
2/*
3 * Copyright (C) 2001 Momchil Velikov
4 * Portions Copyright (C) 2001 Christoph Hellwig
e9416bd3 5 */
8bf7924e
DW
6#ifndef __LIBFROG_RADIX_TREE_H__
7#define __LIBFROG_RADIX_TREE_H__
e9416bd3
DC
8
9#define RADIX_TREE_TAGS
10
11struct radix_tree_root {
12 unsigned int height;
13 struct radix_tree_node *rnode;
14};
15
16#define RADIX_TREE_INIT(mask) { \
17 .height = 0, \
18 .rnode = NULL, \
19}
20
21#define RADIX_TREE(name, mask) \
22 struct radix_tree_root name = RADIX_TREE_INIT(mask)
23
24#define INIT_RADIX_TREE(root, mask) \
25do { \
26 (root)->height = 0; \
27 (root)->rnode = NULL; \
28} while (0)
29
30#ifdef RADIX_TREE_TAGS
31#define RADIX_TREE_MAX_TAGS 2
32#endif
33
34int radix_tree_insert(struct radix_tree_root *, unsigned long, void *);
35void *radix_tree_lookup(struct radix_tree_root *, unsigned long);
36void **radix_tree_lookup_slot(struct radix_tree_root *, unsigned long);
37void *radix_tree_lookup_first(struct radix_tree_root *, unsigned long *);
38void *radix_tree_delete(struct radix_tree_root *, unsigned long);
39unsigned int
40radix_tree_gang_lookup(struct radix_tree_root *root, void **results,
41 unsigned long first_index, unsigned int max_items);
42unsigned int
43radix_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);
46
47void radix_tree_init(void);
48
49#ifdef RADIX_TREE_TAGS
50void *radix_tree_tag_set(struct radix_tree_root *root,
51 unsigned long index, unsigned int tag);
52void *radix_tree_tag_clear(struct radix_tree_root *root,
53 unsigned long index, unsigned int tag);
54int radix_tree_tag_get(struct radix_tree_root *root,
55 unsigned long index, unsigned int tag);
56unsigned int
57radix_tree_gang_lookup_tag(struct radix_tree_root *root, void **results,
58 unsigned long first_index, unsigned int max_items,
59 unsigned int tag);
60int radix_tree_tagged(struct radix_tree_root *root, unsigned int tag);
61#endif
62
8bf7924e 63#endif /* __LIBFROG_RADIX_TREE_H__ */