Bug 1403444 - Expand rbp_first and rbp_last. r?njn
At the same time, simplify the expanded code to better fit in the
template.
--- a/memory/build/rb.h
+++ b/memory/build/rb.h
@@ -125,31 +125,16 @@ public:
}
void SetColor(NodeColor aColor)
{
mRightAndColor = (mRightAndColor & uintptr_t(~1)) | aColor;
}
};
-/* Tree operations. */
-#define rbp_first(a_type, a_field, a_tree, a_root, r_node) \
- do { \
- for ((r_node) = (a_root); a_field(r_node).Left() != &(a_tree)->rbt_nil; \
- (r_node) = a_field(r_node).Left()) { \
- } \
- } while (0)
-
-#define rbp_last(a_type, a_field, a_tree, a_root, r_node) \
- do { \
- for ((r_node) = (a_root); a_field(r_node).Right() != &(a_tree)->rbt_nil; \
- (r_node) = a_field(r_node).Right()) { \
- } \
- } while (0)
-
#define rbp_rotate_left(a_type, a_field, a_node, r_node) \
do { \
(r_node) = a_field(a_node).Right(); \
a_field(a_node).SetRight(a_field(r_node).Left()); \
a_field(r_node).SetLeft((a_node)); \
} while (0)
#define rbp_rotate_right(a_type, a_field, a_node, r_node) \
@@ -509,24 +494,30 @@ struct RedBlackTree
Trait::GetTreeNode(&rbt_nil).SetLeft(&rbt_nil);
Trait::GetTreeNode(&rbt_nil).SetRight(&rbt_nil);
Trait::GetTreeNode(&rbt_nil).SetColor(NodeColor::Black);
}
T* First(T* aStart = nullptr)
{
T* ret;
- rbp_first(T, Trait::GetTreeNode, this, (aStart ? aStart : rbt_root), (ret));
+ for (ret = aStart ? aStart : rbt_root;
+ Trait::GetTreeNode(ret).Left() != &rbt_nil;
+ ret = Trait::GetTreeNode(ret).Left()) {
+ }
return (ret == &rbt_nil) ? nullptr : ret;
}
T* Last(T* aStart = nullptr)
{
T* ret;
- rbp_last(T, Trait::GetTreeNode, this, (aStart ? aStart : rbt_root), ret);
+ for (ret = aStart ? aStart : rbt_root;
+ Trait::GetTreeNode(ret).Right() != &rbt_nil;
+ ret = Trait::GetTreeNode(ret).Right()) {
+ }
return (ret == &rbt_nil) ? nullptr : ret;
}
T* Next(T* aNode)
{
T* ret;
if (Trait::GetTreeNode(aNode).Right() != &rbt_nil) {
ret = First(Trait::GetTreeNode(aNode).Right());