Module Name: src Committed By: riastradh Date: Tue Jul 18 11:43:21 UTC 2023
Modified Files: src/sys/sys: rbtree.h Log Message: rbtree(3): New RB_TREE_INITIALIZER macro. Allows static initialization of an rbtree. XXX pullup-10 To generate a diff of this commit: cvs rdiff -u -r1.5 -r1.6 src/sys/sys/rbtree.h Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: src/sys/sys/rbtree.h diff -u src/sys/sys/rbtree.h:1.5 src/sys/sys/rbtree.h:1.6 --- src/sys/sys/rbtree.h:1.5 Thu Mar 7 14:39:21 2019 +++ src/sys/sys/rbtree.h Tue Jul 18 11:43:21 2023 @@ -1,4 +1,4 @@ -/* $NetBSD: rbtree.h,v 1.5 2019/03/07 14:39:21 roy Exp $ */ +/* $NetBSD: rbtree.h,v 1.6 2023/07/18 11:43:21 riastradh Exp $ */ /*- * Copyright (c) 2001 The NetBSD Foundation, Inc. @@ -125,12 +125,17 @@ TAILQ_HEAD(rb_node_qh, rb_node); #define RB_TAILQ_INSERT_HEAD(a, b, c) TAILQ_INSERT_HEAD(a, b, c) #define RB_TAILQ_INSERT_BEFORE(a, b, c) TAILQ_INSERT_BEFORE(a, b, c) #define RB_TAILQ_INSERT_AFTER(a, b, c, d) TAILQ_INSERT_AFTER(a, b, c, d) + +#define RBDEBUG_TREE_INITIALIZER(t) \ + .rbt_nodes = TAILQ_INITIALIZER((t).rbt_nodes), #else #define RB_TAILQ_REMOVE(a, b, c) do { } while (/*CONSTCOND*/0) #define RB_TAILQ_INIT(a) do { } while (/*CONSTCOND*/0) #define RB_TAILQ_INSERT_HEAD(a, b, c) do { } while (/*CONSTCOND*/0) #define RB_TAILQ_INSERT_BEFORE(a, b, c) do { } while (/*CONSTCOND*/0) #define RB_TAILQ_INSERT_AFTER(a, b, c, d) do { } while (/*CONSTCOND*/0) + +#define RBDEBUG_TREE_INITIALIZER(t) /* nothing */ #endif /* RBDEBUG */ /* @@ -181,6 +186,15 @@ typedef struct rb_tree { #define RBSTAT_DEC(v) do { } while (/*CONSTCOND*/0) #endif +#define RB_TREE_INIT_TYPECHECK(t) \ + 0*sizeof(&(t) - (struct rb_tree *)0) + +#define RB_TREE_INITIALIZER(t, ops) (rb_tree_t) \ +{ \ + .rbt_ops = (ops) + RB_TREE_INIT_TYPECHECK(t), \ + RBDEBUG_TREE_INITIALIZER(t) \ +} + void rb_tree_init(rb_tree_t *, const rb_tree_ops_t *); void * rb_tree_insert_node(rb_tree_t *, void *); void * rb_tree_find_node(rb_tree_t *, const void *);