Ok, now fixed rflip, branch/jump needed tweaking
This commit is contained in:
@@ -1542,27 +1542,26 @@ static int lfs_rbyd_commit(lfs_t *lfs, lfs_rbyd_t *rbyd,
|
|||||||
&& lfs_rtag_isred(p_alts[0])
|
&& lfs_rtag_isred(p_alts[0])
|
||||||
&& (lt < 0 || gt < 0)) {
|
&& (lt < 0 || gt < 0)) {
|
||||||
LFS_ASSERT(lfs_rtag_isblack(alt));
|
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])) {
|
if (lfs_rtag_parallel(alt, p_alts[0])) {
|
||||||
printf("rflip parallel (%x,%x)\n", lt, gt);
|
printf("rflip parallel (%x,%x)\n", lt, gt);
|
||||||
lfs_rtag_t alt_ = p_alts[0];
|
alt = lfs_rbyd_flip(alt, lt, gt);
|
||||||
p_alts[0] = lfs_rtag_red(lfs_rbyd_flip(alt, lt, gt));
|
lfs_off_t jump_ = jump;
|
||||||
alt = lfs_rtag_black(alt_);
|
jump = branch;
|
||||||
lfs_off_t jump_ = p_jumps[0];
|
branch = jump_;
|
||||||
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_;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
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, <, >);
|
lfs_rbyd_untrim(alt, <, >);
|
||||||
lfs_rbyd_trim(p_alts[0], <, >);
|
lfs_rbyd_trim(p_alts[0], <, >);
|
||||||
printf("=> (%x, %x)\n", 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;
|
off += delta;
|
||||||
|
|
||||||
//lfs_rbyd_p_red(p_alts, p_jumps);
|
lfs_rbyd_p_red(p_alts, p_jumps);
|
||||||
}
|
}
|
||||||
|
|
||||||
// flush any pending alts
|
// flush any pending alts
|
||||||
|
|||||||
@@ -626,8 +626,6 @@ code = '''
|
|||||||
lfs_rbyd_lookup(&lfs, &rbyd, LFS_MKRTAG(GSTATE, 4, 0), &off, &size)
|
lfs_rbyd_lookup(&lfs, &rbyd, LFS_MKRTAG(GSTATE, 4, 0), &off, &size)
|
||||||
=> LFS_MKRTAG(GSTATE, 4, 0);
|
=> 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
|
// flip a red edge, ignore a black edge
|
||||||
// >y
|
// >y
|
||||||
// .-------'|
|
// .-------'|
|
||||||
|
|||||||
Reference in New Issue
Block a user