Ok, now fixed rflip, branch/jump needed tweaking

This commit is contained in:
Christopher Haster
2022-12-23 12:47:40 -06:00
parent fe28837861
commit 53efaac243
2 changed files with 16 additions and 19 deletions
+16 -17
View File
@@ -1542,27 +1542,26 @@ static int lfs_rbyd_commit(lfs_t *lfs, lfs_rbyd_t *rbyd,
&& lfs_rtag_isred(p_alts[0])
&& (lt < 0 || gt < 0)) {
LFS_ASSERT(lfs_rtag_isblack(alt));
printf("???\n");
printf("rflip %s (%x,%x)\n",
lfs_rtag_parallel(alt, p_alts[0]) ? "parallel" : "perpendicular",
lt, gt);
if (lfs_rtag_parallel(alt, p_alts[0])) {
printf("rflip parallel (%x,%x)\n", lt, gt);
lfs_rtag_t alt_ = p_alts[0];
p_alts[0] = lfs_rtag_red(lfs_rbyd_flip(alt, lt, gt));
alt = lfs_rtag_black(alt_);
lfs_off_t jump_ = p_jumps[0];
p_jumps[0] = branch;
branch = jump;
jump = jump_;
} else {
printf("rflip perpendicular\n");
lfs_rtag_t alt_ = p_alts[0];
p_alts[0] = lfs_rtag_red(alt);
alt = lfs_rtag_black(alt_);
lfs_off_t jump_ = p_jumps[0];
p_jumps[0] = branch;
jump = jump_;
alt = lfs_rbyd_flip(alt, lt, gt);
lfs_off_t jump_ = jump;
jump = branch;
branch = jump_;
}
lfs_rtag_t alt_ = p_alts[0];
lfs_off_t jump_ = p_jumps[0];
p_alts[0] = lfs_rtag_red(alt);
p_jumps[0] = jump;
alt = lfs_rtag_black(alt_);
jump = jump_;
lfs_rbyd_untrim(alt, &lt, &gt);
lfs_rbyd_trim(p_alts[0], &lt, &gt);
printf("=> (%x, %x)\n", lt, gt);
@@ -1698,7 +1697,7 @@ static int lfs_rbyd_commit(lfs_t *lfs, lfs_rbyd_t *rbyd,
}
off += delta;
//lfs_rbyd_p_red(p_alts, p_jumps);
lfs_rbyd_p_red(p_alts, p_jumps);
}
// flush any pending alts
-2
View File
@@ -626,8 +626,6 @@ code = '''
lfs_rbyd_lookup(&lfs, &rbyd, LFS_MKRTAG(GSTATE, 4, 0), &off, &size)
=> LFS_MKRTAG(GSTATE, 4, 0);
printf("-------------------------\n");
// TODO this doesn't work since 2!<1? 4 2 3 1 should work consistently
// flip a red edge, ignore a black edge
// >y
// .-------'|