--- a/memory/build/rb.h
+++ b/memory/build/rb.h
@@ -132,18 +132,16 @@ struct RedBlackTree
#define rb_node_field(a_node, a_field) (a_node)->a_field
/* Left accessors. */
#define rbp_left_set(a_type, a_field, a_node, a_left) \
rb_node_field(a_node, a_field).SetLeft(a_left)
/* Right accessors. */
-#define rbp_right_get(a_type, a_field, a_node) \
- rb_node_field(a_node, a_field).Right()
#define rbp_right_set(a_type, a_field, a_node, a_right) \
rb_node_field(a_node, a_field).SetRight(a_right)
/* Color accessors. */
#define rbp_red_get(a_type, a_field, a_node) \
rb_node_field(a_node, a_field).IsRed()
#define rbp_color_set(a_type, a_field, a_node, a_red) \
rb_node_field(a_node, a_field) \
@@ -176,40 +174,40 @@ struct RedBlackTree
rb_node_field((r_node), a_field).Left() != &(a_tree)->rbt_nil; \
(r_node) = rb_node_field((r_node), a_field).Left()) { \
} \
} while (0)
#define rbp_last(a_type, a_field, a_tree, a_root, r_node) \
do { \
for ((r_node) = (a_root); \
- rbp_right_get(a_type, a_field, (r_node)) != &(a_tree)->rbt_nil; \
- (r_node) = rbp_right_get(a_type, a_field, (r_node))) { \
+ rb_node_field((r_node), a_field).Right() != &(a_tree)->rbt_nil; \
+ (r_node) = rb_node_field((r_node), a_field).Right()) { \
} \
} while (0)
#define rbp_next(a_type, a_field, a_cmp, a_tree, a_node, r_node) \
do { \
- if (rbp_right_get(a_type, a_field, (a_node)) != &(a_tree)->rbt_nil) { \
+ if (rb_node_field((a_node), a_field).Right() != &(a_tree)->rbt_nil) { \
rbp_first(a_type, \
a_field, \
a_tree, \
- rbp_right_get(a_type, a_field, (a_node)), \
+ rb_node_field((a_node), a_field).Right(), \
(r_node)); \
} else { \
a_type* rbp_n_t = (a_tree)->rbt_root; \
MOZ_ASSERT(rbp_n_t != &(a_tree)->rbt_nil); \
(r_node) = &(a_tree)->rbt_nil; \
while (true) { \
int rbp_n_cmp = (a_cmp)((a_node), rbp_n_t); \
if (rbp_n_cmp < 0) { \
(r_node) = rbp_n_t; \
rbp_n_t = rb_node_field(rbp_n_t, a_field).Left(); \
} else if (rbp_n_cmp > 0) { \
- rbp_n_t = rbp_right_get(a_type, a_field, rbp_n_t); \
+ rbp_n_t = rb_node_field(rbp_n_t, a_field).Right(); \
} else { \
break; \
} \
MOZ_ASSERT(rbp_n_t != &(a_tree)->rbt_nil); \
} \
} \
} while (0)
@@ -226,17 +224,17 @@ struct RedBlackTree
MOZ_ASSERT(rbp_p_t != &(a_tree)->rbt_nil); \
(r_node) = &(a_tree)->rbt_nil; \
while (true) { \
int rbp_p_cmp = (a_cmp)((a_node), rbp_p_t); \
if (rbp_p_cmp < 0) { \
rbp_p_t = rb_node_field(rbp_p_t, a_field).Left(); \
} else if (rbp_p_cmp > 0) { \
(r_node) = rbp_p_t; \
- rbp_p_t = rbp_right_get(a_type, a_field, rbp_p_t); \
+ rbp_p_t = rb_node_field(rbp_p_t, a_field).Right(); \
} else { \
break; \
} \
MOZ_ASSERT(rbp_p_t != &(a_tree)->rbt_nil); \
} \
} \
} while (0)
@@ -276,17 +274,17 @@ struct RedBlackTree
do { \
int rbp_se_cmp; \
(r_node) = (a_tree)->rbt_root; \
while ((r_node) != &(a_tree)->rbt_nil && \
(rbp_se_cmp = (a_cmp)((a_key), (r_node))) != 0) { \
if (rbp_se_cmp < 0) { \
(r_node) = rb_node_field((r_node), a_field).Left(); \
} else { \
- (r_node) = rbp_right_get(a_type, a_field, (r_node)); \
+ (r_node) = rb_node_field((r_node), a_field).Right(); \
} \
} \
if ((r_node) == &(a_tree)->rbt_nil) { \
(r_node) = nullptr; \
} \
} while (0)
/*
@@ -298,41 +296,41 @@ struct RedBlackTree
a_type* rbp_ns_t = (a_tree)->rbt_root; \
(r_node) = nullptr; \
while (rbp_ns_t != &(a_tree)->rbt_nil) { \
int rbp_ns_cmp = (a_cmp)((a_key), rbp_ns_t); \
if (rbp_ns_cmp < 0) { \
(r_node) = rbp_ns_t; \
rbp_ns_t = rb_node_field(rbp_ns_t, a_field).Left(); \
} else if (rbp_ns_cmp > 0) { \
- rbp_ns_t = rbp_right_get(a_type, a_field, rbp_ns_t); \
+ rbp_ns_t = rb_node_field(rbp_ns_t, a_field).Right(); \
} else { \
(r_node) = rbp_ns_t; \
break; \
} \
} \
} while (0)
/*
* Find a match if it exists. Otherwise, find the previous lesser node, if one
* exists.
*/
#define rbp_rotate_left(a_type, a_field, a_node, r_node) \
do { \
- (r_node) = rbp_right_get(a_type, a_field, (a_node)); \
+ (r_node) = rb_node_field((a_node), a_field).Right(); \
rbp_right_set( \
a_type, a_field, (a_node), rb_node_field((r_node), a_field).Left()); \
rbp_left_set(a_type, a_field, (r_node), (a_node)); \
} while (0)
#define rbp_rotate_right(a_type, a_field, a_node, r_node) \
do { \
(r_node) = rb_node_field((a_node), a_field).Left(); \
rbp_left_set( \
- a_type, a_field, (a_node), rbp_right_get(a_type, a_field, (r_node))); \
+ a_type, a_field, (a_node), rb_node_field((r_node), a_field).Right()); \
rbp_right_set(a_type, a_field, (r_node), (a_node)); \
} while (0)
#define rbp_lean_left(a_type, a_field, a_node, r_node) \
do { \
bool rbp_ll_red; \
rbp_rotate_left(a_type, a_field, (a_node), (r_node)); \
rbp_ll_red = rbp_red_get(a_type, a_field, (a_node)); \
@@ -349,23 +347,23 @@ struct RedBlackTree
rbp_red_set(a_type, a_field, (a_node)); \
} while (0)
#define rbp_move_red_left(a_type, a_field, a_node, r_node) \
do { \
a_type *rbp_mrl_t, *rbp_mrl_u; \
rbp_mrl_t = rb_node_field((a_node), a_field).Left(); \
rbp_red_set(a_type, a_field, rbp_mrl_t); \
- rbp_mrl_t = rbp_right_get(a_type, a_field, (a_node)); \
+ rbp_mrl_t = rb_node_field((a_node), a_field).Right(); \
rbp_mrl_u = rb_node_field(rbp_mrl_t, a_field).Left(); \
if (rbp_red_get(a_type, a_field, rbp_mrl_u)) { \
rbp_rotate_right(a_type, a_field, rbp_mrl_t, rbp_mrl_u); \
rbp_right_set(a_type, a_field, (a_node), rbp_mrl_u); \
rbp_rotate_left(a_type, a_field, (a_node), (r_node)); \
- rbp_mrl_t = rbp_right_get(a_type, a_field, (a_node)); \
+ rbp_mrl_t = rb_node_field((a_node), a_field).Right(); \
if (rbp_red_get(a_type, a_field, rbp_mrl_t)) { \
rbp_black_set(a_type, a_field, rbp_mrl_t); \
rbp_red_set(a_type, a_field, (a_node)); \
rbp_rotate_left(a_type, a_field, (a_node), rbp_mrl_t); \
rbp_left_set(a_type, a_field, (r_node), rbp_mrl_t); \
} else { \
rbp_black_set(a_type, a_field, (a_node)); \
} \
@@ -376,17 +374,17 @@ struct RedBlackTree
} while (0)
#define rbp_move_red_right(a_type, a_field, a_node, r_node) \
do { \
a_type* rbp_mrr_t; \
rbp_mrr_t = rb_node_field((a_node), a_field).Left(); \
if (rbp_red_get(a_type, a_field, rbp_mrr_t)) { \
a_type *rbp_mrr_u, *rbp_mrr_v; \
- rbp_mrr_u = rbp_right_get(a_type, a_field, rbp_mrr_t); \
+ rbp_mrr_u = rb_node_field(rbp_mrr_t, a_field).Right(); \
rbp_mrr_v = rb_node_field(rbp_mrr_u, a_field).Left(); \
if (rbp_red_get(a_type, a_field, rbp_mrr_v)) { \
rbp_color_set( \
a_type, a_field, rbp_mrr_u, rbp_red_get(a_type, a_field, (a_node))); \
rbp_black_set(a_type, a_field, rbp_mrr_v); \
rbp_rotate_left(a_type, a_field, rbp_mrr_t, rbp_mrr_u); \
rbp_left_set(a_type, a_field, (a_node), rbp_mrr_u); \
rbp_rotate_right(a_type, a_field, (a_node), (r_node)); \
@@ -446,54 +444,54 @@ struct RedBlackTree
rbp_black_set(a_type, a_field, rbp_i_u); \
if (rb_node_field(rbp_i_p, a_field).Left() == rbp_i_c) { \
rbp_left_set(a_type, a_field, rbp_i_p, rbp_i_t); \
rbp_i_c = rbp_i_t; \
} else { \
/* rbp_i_c was the right child of rbp_i_p, so rotate */ \
/* left in order to maintain the left-leaning */ \
/* invariant. */ \
- MOZ_ASSERT(rbp_right_get(a_type, a_field, rbp_i_p) == rbp_i_c); \
+ MOZ_ASSERT(rb_node_field(rbp_i_p, a_field).Right() == rbp_i_c); \
rbp_right_set(a_type, a_field, rbp_i_p, rbp_i_t); \
rbp_lean_left(a_type, a_field, rbp_i_p, rbp_i_u); \
if (rb_node_field(rbp_i_g, a_field).Left() == rbp_i_p) { \
rbp_left_set(a_type, a_field, rbp_i_g, rbp_i_u); \
} else { \
- MOZ_ASSERT(rbp_right_get(a_type, a_field, rbp_i_g) == rbp_i_p); \
+ MOZ_ASSERT(rb_node_field(rbp_i_g, a_field).Right() == rbp_i_p); \
rbp_right_set(a_type, a_field, rbp_i_g, rbp_i_u); \
} \
rbp_i_p = rbp_i_u; \
rbp_i_cmp = (a_cmp)((a_node), rbp_i_p); \
if (rbp_i_cmp < 0) { \
rbp_i_c = rb_node_field(rbp_i_p, a_field).Left(); \
} else { \
MOZ_ASSERT(rbp_i_cmp > 0); \
- rbp_i_c = rbp_right_get(a_type, a_field, rbp_i_p); \
+ rbp_i_c = rb_node_field(rbp_i_p, a_field).Right(); \
} \
continue; \
} \
} \
rbp_i_g = rbp_i_p; \
rbp_i_p = rbp_i_c; \
rbp_i_cmp = (a_cmp)((a_node), rbp_i_c); \
if (rbp_i_cmp < 0) { \
rbp_i_c = rb_node_field(rbp_i_c, a_field).Left(); \
} else { \
MOZ_ASSERT(rbp_i_cmp > 0); \
- rbp_i_c = rbp_right_get(a_type, a_field, rbp_i_c); \
+ rbp_i_c = rb_node_field(rbp_i_c, a_field).Right(); \
} \
} \
/* rbp_i_p now refers to the node under which to insert. */ \
rbp_node_new(a_type, a_field, a_tree, (a_node)); \
if (rbp_i_cmp > 0) { \
rbp_right_set(a_type, a_field, rbp_i_p, (a_node)); \
rbp_lean_left(a_type, a_field, rbp_i_p, rbp_i_t); \
if (rb_node_field(rbp_i_g, a_field).Left() == rbp_i_p) { \
rbp_left_set(a_type, a_field, rbp_i_g, rbp_i_t); \
- } else if (rbp_right_get(a_type, a_field, rbp_i_g) == rbp_i_p) { \
+ } else if (rb_node_field(rbp_i_g, a_field).Right() == rbp_i_p) { \
rbp_right_set(a_type, a_field, rbp_i_g, rbp_i_t); \
} \
} else { \
rbp_left_set(a_type, a_field, rbp_i_p, (a_node)); \
} \
/* Update the root and make sure that it is black. */ \
(a_tree)->rbt_root = rb_node_field(&rbp_i_s, a_field).Left(); \
rbp_black_set(a_type, a_field, (a_tree)->rbt_root); \
@@ -529,17 +527,17 @@ struct RedBlackTree
} else { \
/* Move left. */ \
rbp_r_p = rbp_r_c; \
rbp_r_c = rb_node_field(rbp_r_c, a_field).Left(); \
} \
} else { \
if (rbp_r_cmp == 0) { \
MOZ_ASSERT((a_node) == rbp_r_c); \
- if (rbp_right_get(a_type, a_field, rbp_r_c) == &(a_tree)->rbt_nil) { \
+ if (rb_node_field(rbp_r_c, a_field).Right() == &(a_tree)->rbt_nil) { \
/* Delete root node (which is also a leaf node). */ \
if (rb_node_field(rbp_r_c, a_field).Left() != &(a_tree)->rbt_nil) { \
rbp_lean_right(a_type, a_field, rbp_r_c, rbp_r_t); \
rbp_right_set(a_type, a_field, rbp_r_t, &(a_tree)->rbt_nil); \
} else { \
rbp_r_t = &(a_tree)->rbt_nil; \
} \
rbp_left_set(a_type, a_field, rbp_r_p, rbp_r_t); \
@@ -551,17 +549,17 @@ struct RedBlackTree
rbp_r_xp = rbp_r_p; \
rbp_r_cmp = 1; /* Note that deletion is incomplete. */ \
} \
} \
if (rbp_r_cmp == 1) { \
if (rbp_red_get( \
a_type, \
a_field, \
- rb_node_field(rbp_right_get(a_type, a_field, rbp_r_c), a_field) \
+ rb_node_field(rb_node_field(rbp_r_c, a_field).Right(), a_field) \
.Left()) == false) { \
rbp_r_t = rb_node_field(rbp_r_c, a_field).Left(); \
if (rbp_red_get(a_type, a_field, rbp_r_t)) { \
/* Standard transform. */ \
rbp_move_red_right(a_type, a_field, rbp_r_c, rbp_r_t); \
} else { \
/* Root-specific transform. */ \
rbp_red_set(a_type, a_field, rbp_r_c); \
@@ -576,53 +574,53 @@ struct RedBlackTree
rbp_rotate_left(a_type, a_field, rbp_r_c, rbp_r_t); \
} \
} \
rbp_left_set(a_type, a_field, rbp_r_p, rbp_r_t); \
rbp_r_c = rbp_r_t; \
} else { \
/* Move right. */ \
rbp_r_p = rbp_r_c; \
- rbp_r_c = rbp_right_get(a_type, a_field, rbp_r_c); \
+ rbp_r_c = rb_node_field(rbp_r_c, a_field).Right(); \
} \
} \
} \
if (rbp_r_cmp != 0) { \
while (true) { \
MOZ_ASSERT(rbp_r_p != &(a_tree)->rbt_nil); \
rbp_r_cmp = (a_cmp)((a_node), rbp_r_c); \
if (rbp_r_cmp < 0) { \
rbp_r_t = rb_node_field(rbp_r_c, a_field).Left(); \
if (rbp_r_t == &(a_tree)->rbt_nil) { \
/* rbp_r_c now refers to the successor node to */ \
/* relocate, and rbp_r_xp/a_node refer to the */ \
/* context for the relocation. */ \
if (rb_node_field(rbp_r_xp, a_field).Left() == (a_node)) { \
rbp_left_set(a_type, a_field, rbp_r_xp, rbp_r_c); \
} else { \
- MOZ_ASSERT(rbp_right_get(a_type, a_field, rbp_r_xp) == \
+ MOZ_ASSERT(rb_node_field(rbp_r_xp, a_field).Right() == \
(a_node)); \
rbp_right_set(a_type, a_field, rbp_r_xp, rbp_r_c); \
} \
rbp_left_set(a_type, \
a_field, \
rbp_r_c, \
rb_node_field((a_node), a_field).Left()); \
rbp_right_set(a_type, \
a_field, \
rbp_r_c, \
- rbp_right_get(a_type, a_field, (a_node))); \
+ rb_node_field((a_node), a_field).Right()); \
rbp_color_set(a_type, \
a_field, \
rbp_r_c, \
rbp_red_get(a_type, a_field, (a_node))); \
if (rb_node_field(rbp_r_p, a_field).Left() == rbp_r_c) { \
rbp_left_set(a_type, a_field, rbp_r_p, &(a_tree)->rbt_nil); \
} else { \
- MOZ_ASSERT(rbp_right_get(a_type, a_field, rbp_r_p) == rbp_r_c); \
+ MOZ_ASSERT(rb_node_field(rbp_r_p, a_field).Right() == rbp_r_c); \
rbp_right_set(a_type, a_field, rbp_r_p, &(a_tree)->rbt_nil); \
} \
break; \
} \
rbp_r_u = rb_node_field(rbp_r_t, a_field).Left(); \
if (rbp_red_get(a_type, a_field, rbp_r_t) == false && \
rbp_red_get(a_type, a_field, rbp_r_u) == false) { \
rbp_move_red_left(a_type, a_field, rbp_r_c, rbp_r_t); \
@@ -636,17 +634,17 @@ struct RedBlackTree
rbp_r_p = rbp_r_c; \
rbp_r_c = rb_node_field(rbp_r_c, a_field).Left(); \
} \
} else { \
/* Check whether to delete this node (it has to be */ \
/* the correct node and a leaf node). */ \
if (rbp_r_cmp == 0) { \
MOZ_ASSERT((a_node) == rbp_r_c); \
- if (rbp_right_get(a_type, a_field, rbp_r_c) == \
+ if (rb_node_field(rbp_r_c, a_field).Right() == \
&(a_tree)->rbt_nil) { \
/* Delete leaf node. */ \
if (rb_node_field(rbp_r_c, a_field).Left() != \
&(a_tree)->rbt_nil) { \
rbp_lean_right(a_type, a_field, rbp_r_c, rbp_r_t); \
rbp_right_set(a_type, a_field, rbp_r_t, &(a_tree)->rbt_nil); \
} else { \
rbp_r_t = &(a_tree)->rbt_nil; \
@@ -661,29 +659,29 @@ struct RedBlackTree
/* This is the node we want to delete, but we */ \
/* will instead swap it with its successor */ \
/* and delete the successor. Record enough */ \
/* information to do the swap later. */ \
/* rbp_r_xp is a_node's parent. */ \
rbp_r_xp = rbp_r_p; \
} \
} \
- rbp_r_t = rbp_right_get(a_type, a_field, rbp_r_c); \
+ rbp_r_t = rb_node_field(rbp_r_c, a_field).Right(); \
rbp_r_u = rb_node_field(rbp_r_t, a_field).Left(); \
if (rbp_red_get(a_type, a_field, rbp_r_u) == false) { \
rbp_move_red_right(a_type, a_field, rbp_r_c, rbp_r_t); \
if (rb_node_field(rbp_r_p, a_field).Left() == rbp_r_c) { \
rbp_left_set(a_type, a_field, rbp_r_p, rbp_r_t); \
} else { \
rbp_right_set(a_type, a_field, rbp_r_p, rbp_r_t); \
} \
rbp_r_c = rbp_r_t; \
} else { \
rbp_r_p = rbp_r_c; \
- rbp_r_c = rbp_right_get(a_type, a_field, rbp_r_c); \
+ rbp_r_c = rb_node_field(rbp_r_c, a_field).Right(); \
} \
} \
} \
} \
/* Update root. */ \
(a_tree)->rbt_root = rb_node_field(&rbp_r_s, a_field).Left(); \
} while (0)
@@ -815,17 +813,17 @@ struct RedBlackTree
#define rb_foreach_end(a_type, a_field, a_tree, a_var) \
if (rbp_f_synced) { \
rbp_f_synced = false; \
continue; \
} \
/* Find the successor. */ \
if ((rbp_f_node = \
- rbp_right_get(a_type, a_field, rbp_f_path[rbp_f_depth - 1])) != \
+ rb_node_field(rbp_f_path[rbp_f_depth - 1], a_field).Right()) != \
&(a_tree)->rbt_nil) { \
/* The successor is the left-most node in the right */ \
/* subtree. */ \
rbp_f_path[rbp_f_depth] = rbp_f_node; \
rbp_f_depth++; \
while ((rbp_f_node = \
rb_node_field(rbp_f_path[rbp_f_depth - 1], a_field).Left()) != \
&(a_tree)->rbt_nil) { \