diff options
author | Justus Winter <4winter@informatik.uni-hamburg.de> | 2015-03-16 11:37:06 +0100 |
---|---|---|
committer | Justus Winter <4winter@informatik.uni-hamburg.de> | 2015-05-20 11:08:29 +0200 |
commit | 7d76ea075c248b2ed64c69a5e5dd4493d943e628 (patch) | |
tree | 9b8693e4d4509597d664b1aea1ff53c4fc17cd9c /kern/rdxtree_i.h | |
parent | 6eb79f812ee43a4e9142de61a5821e0cc8c52bb1 (diff) | |
download | gnumach-7d76ea075c248b2ed64c69a5e5dd4493d943e628.tar.gz gnumach-7d76ea075c248b2ed64c69a5e5dd4493d943e628.tar.bz2 gnumach-7d76ea075c248b2ed64c69a5e5dd4493d943e628.zip |
kern: add radix tree library
Import a radix tree library from Richard Braun's librbraun.
* Makefile.am (clib_routines): Steal `__ffsdi2'.
* Makefrag.am (libkernel_a_SOURCES): Add new files.
* kern/rdxtree.c: New file.
* kern/rdxtree.h: Likewise.
* kern/rdxtree_i.h: Likewise.
* kern/startup.c (setup_main): Initialize radix tree library.
Diffstat (limited to 'kern/rdxtree_i.h')
-rw-r--r-- | kern/rdxtree_i.h | 66 |
1 files changed, 66 insertions, 0 deletions
diff --git a/kern/rdxtree_i.h b/kern/rdxtree_i.h new file mode 100644 index 00000000..1bd1f64a --- /dev/null +++ b/kern/rdxtree_i.h @@ -0,0 +1,66 @@ +/* + * Copyright (c) 2013-2015 Richard Braun. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + * + * + * Upstream site with license notes : + * http://git.sceen.net/rbraun/librbraun.git/ + */ + +#ifndef _RDXTREE_I_H +#define _RDXTREE_I_H + +/* + * Radix tree. + */ +struct rdxtree { + unsigned int height; + void *root; +}; + +/* + * Radix tree iterator. + * + * The node member refers to the node containing the current pointer, if any. + * The key member refers to the current pointer, and is valid if and only if + * rdxtree_walk() has been called at least once on the iterator. + */ +struct rdxtree_iter { + void *node; + rdxtree_key_t key; +}; + +/* + * Initialize an iterator. + */ +static inline void +rdxtree_iter_init(struct rdxtree_iter *iter) +{ + iter->node = NULL; + iter->key = (rdxtree_key_t)-1; +} + +int rdxtree_insert_common(struct rdxtree *tree, rdxtree_key_t key, + void *ptr, void ***slotp); + +int rdxtree_insert_alloc_common(struct rdxtree *tree, void *ptr, + rdxtree_key_t *keyp, void ***slotp); + +void * rdxtree_lookup_common(const struct rdxtree *tree, rdxtree_key_t key, + int get_slot); + +void * rdxtree_walk(struct rdxtree *tree, struct rdxtree_iter *iter); + +#endif /* _RDXTREE_I_H */ |