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 *);