Tweaked appendattrs to not need to save changes to rid_

This commit is contained in:
Christopher Haster
2023-10-01 23:54:21 -05:00
parent ef691d4cfe
commit 8c0f99890d
+6 -8
View File
@@ -2242,9 +2242,9 @@ static int lfsr_rbyd_lookupnext(lfs_t *lfs, const lfsr_rbyd_t *rbyd,
// found end of tree?
} else {
// update the tag rid
LFS_ASSERT(lfsr_tag_shrubmode(alt) == 0x0000);
lfsr_srid_t rid__ = upper-1;
lfsr_tag_t tag__ = alt;
LFS_ASSERT(lfsr_tag_shrubmode(tag__) == 0x0000);
// not what we're looking for?
if (!lfsr_tag_key(tag__)
@@ -2773,7 +2773,6 @@ static int lfsr_rbyd_appendattr(lfs_t *lfs, lfsr_rbyd_t *rbyd,
// - preserve diverged state
LFS_ASSERT(lfsr_tag_shrubmode(alt) == 0x0000);
tag_ = lfsr_tag_mode(tag_ & ~LFSR_TAG_RM) | alt;
rid_ = upper_rid-1;
// done?
if (!lfsr_tag_hasdiverged(tag_) || !lfsr_tag_isrm(other_tag_)) {
@@ -2803,7 +2802,6 @@ static int lfsr_rbyd_appendattr(lfs_t *lfs, lfsr_rbyd_t *rbyd,
if (lfsr_tag_isdivergedlower(tag_)) {
// finished on lower path
tag_ = other_tag_;
rid_ = other_rid_;
branch = other_branch;
upper_rid = other_upper_rid;
} else {
@@ -2830,8 +2828,8 @@ static int lfsr_rbyd_appendattr(lfs_t *lfs, lfsr_rbyd_t *rbyd,
lfsr_tag_t alt = 0;
lfsr_rid_t weight = 0;
if (lfsr_tag_key(tag_)
&& (rid_ < rid-lfs_smax32(-delta, 0)
|| (rid_ == rid-lfs_smax32(-delta, 0)
&& (upper_rid-1 < rid-lfs_smax32(-delta, 0)
|| (upper_rid-1 == rid-lfs_smax32(-delta, 0)
&& ((delta > 0 && !lfsr_tag_isgrow(tag))
|| (lfsr_tag_iswide(tag)
? lfsr_tag_supkey(tag_) < lfsr_tag_supkey(tag)
@@ -2849,13 +2847,13 @@ static int lfsr_rbyd_appendattr(lfs_t *lfs, lfsr_rbyd_t *rbyd,
? LFSR_TAG_R
: LFSR_TAG_B),
lfsr_tag_key(tag_));
weight = (rid_+1) - lower_rid;
weight = upper_rid - lower_rid;
lower_rid += weight;
}
} else if (lfsr_tag_key(tag_)
&& (rid_ > rid
|| (rid_ == rid
&& (upper_rid-1 > rid
|| (upper_rid-1 == rid
&& ((delta > 0 && !lfsr_tag_isgrow(tag))
|| (lfsr_tag_iswide(tag)
? lfsr_tag_supkey(tag_) > lfsr_tag_supkey(tag)