svn commit: r361727 - head/sys/sys
Doug Moore
dougm at FreeBSD.org
Tue Jun 2 17:18:17 UTC 2020
Author: dougm
Date: Tue Jun 2 17:18:16 2020
New Revision: 361727
URL: https://svnweb.freebsd.org/changeset/base/361727
Log:
Remove from RB_REMOVE_COLOR some null checks where the pointer checked
is provably never null. Restructure the surrounding code just enough
to make the non-nullness obvious.
Reviewed by: markj
Tested by: pho
Differential Revision: https://reviews.freebsd.org/D25089
Modified:
head/sys/sys/tree.h
Modified: head/sys/sys/tree.h
==============================================================================
--- head/sys/sys/tree.h Tue Jun 2 16:40:58 2020 (r361726)
+++ head/sys/sys/tree.h Tue Jun 2 17:18:16 2020 (r361727)
@@ -493,26 +493,23 @@ name##_RB_REMOVE_COLOR(struct name *head, struct type
RB_ROTATE_LEFT(head, parent, tmp, field);\
tmp = RB_RIGHT(parent, field); \
} \
- if (!RB_ISRED(RB_LEFT(tmp, field), field) && \
- !RB_ISRED(RB_RIGHT(tmp, field), field)) { \
+ if (RB_ISRED(RB_LEFT(tmp, field), field)) { \
+ struct type *oleft; \
+ oleft = RB_LEFT(tmp, field); \
+ RB_COLOR(oleft, field) = RB_BLACK; \
RB_COLOR(tmp, field) = RB_RED; \
+ RB_ROTATE_RIGHT(head, tmp, oleft, field); \
+ tmp = RB_RIGHT(parent, field); \
+ } else if (!RB_ISRED(RB_RIGHT(tmp, field), field)) { \
+ RB_COLOR(tmp, field) = RB_RED; \
elm = parent; \
parent = RB_PARENT(elm, field); \
continue; \
} \
- if (!RB_ISRED(RB_RIGHT(tmp, field), field)) { \
- struct type *oleft; \
- if ((oleft = RB_LEFT(tmp, field)) \
- != NULL) \
- RB_COLOR(oleft, field) = RB_BLACK; \
- RB_COLOR(tmp, field) = RB_RED; \
- RB_ROTATE_RIGHT(head, tmp, oleft, field); \
- tmp = RB_RIGHT(parent, field); \
- } \
+ if (RB_ISRED(RB_RIGHT(tmp, field), field)) \
+ RB_COLOR(RB_RIGHT(tmp, field), field) = RB_BLACK; \
RB_COLOR(tmp, field) = RB_COLOR(parent, field); \
RB_COLOR(parent, field) = RB_BLACK; \
- if (RB_RIGHT(tmp, field)) \
- RB_COLOR(RB_RIGHT(tmp, field), field) = RB_BLACK; \
RB_ROTATE_LEFT(head, parent, tmp, field); \
elm = RB_ROOT(head); \
break; \
@@ -523,26 +520,23 @@ name##_RB_REMOVE_COLOR(struct name *head, struct type
RB_ROTATE_RIGHT(head, parent, tmp, field);\
tmp = RB_LEFT(parent, field); \
} \
- if (!RB_ISRED(RB_LEFT(tmp, field), field) && \
- !RB_ISRED(RB_RIGHT(tmp, field), field)) { \
+ if (RB_ISRED(RB_RIGHT(tmp, field), field)) { \
+ struct type *oright; \
+ oright = RB_RIGHT(tmp, field); \
+ RB_COLOR(oright, field) = RB_BLACK; \
RB_COLOR(tmp, field) = RB_RED; \
+ RB_ROTATE_LEFT(head, tmp, oright, field); \
+ tmp = RB_LEFT(parent, field); \
+ } else if (!RB_ISRED(RB_LEFT(tmp, field), field)) { \
+ RB_COLOR(tmp, field) = RB_RED; \
elm = parent; \
parent = RB_PARENT(elm, field); \
continue; \
} \
- if (!RB_ISRED(RB_LEFT(tmp, field), field)) { \
- struct type *oright; \
- if ((oright = RB_RIGHT(tmp, field)) \
- != NULL) \
- RB_COLOR(oright, field) = RB_BLACK; \
- RB_COLOR(tmp, field) = RB_RED; \
- RB_ROTATE_LEFT(head, tmp, oright, field); \
- tmp = RB_LEFT(parent, field); \
- } \
+ if (RB_ISRED(RB_LEFT(tmp, field), field)) \
+ RB_COLOR(RB_LEFT(tmp, field), field) = RB_BLACK; \
RB_COLOR(tmp, field) = RB_COLOR(parent, field); \
RB_COLOR(parent, field) = RB_BLACK; \
- if (RB_LEFT(tmp, field)) \
- RB_COLOR(RB_LEFT(tmp, field), field) = RB_BLACK; \
RB_ROTATE_RIGHT(head, parent, tmp, field); \
elm = RB_ROOT(head); \
break; \
More information about the svn-src-all
mailing list