More mid-related function cleanup
Reverted to one set of signed lfsr_mid_rid/bid functions, and tried to
make their usage more consistent.
We have two ways to compare mdirs now, lfsr_mdir_cmp (compares block
addresses) and lfsr_mdir_bid (compares mids), and it's not very clear
when to use which one. lfsr_mdir_cmp is a bit more robust in weird mid
cases (mainly inlined mdirs when mroot mid=-1), so currently preferring
that.
Also did some bit twiddling to preserve mid=-1 => bid=-1 and rid=-1,
this save a bit of code:
code stack
before: 31056 2488
after: 30972 (-0.3%) 2496 (+0.3%)
This commit is contained in:
@@ -1711,20 +1711,14 @@ static inline lfsr_mid_t lfsr_mweight(lfs_t *lfs) {
|
||||
return 1 << lfs->mbits;
|
||||
}
|
||||
|
||||
static inline lfsr_bid_t lfsr_mid_bid(lfs_t *lfs, lfsr_mid_t mid) {
|
||||
static inline lfsr_sbid_t lfsr_mid_bid(lfs_t *lfs, lfsr_smid_t mid) {
|
||||
return mid | ((1 << lfs->mbits) - 1);
|
||||
}
|
||||
|
||||
static inline lfsr_rid_t lfsr_mid_rid(lfs_t *lfs, lfsr_mid_t mid) {
|
||||
return mid & ((1 << lfs->mbits) - 1);
|
||||
}
|
||||
|
||||
static inline lfsr_bid_t lfsr_mid_cbid(lfs_t *lfs, lfsr_smid_t mid) {
|
||||
return lfsr_mid_bid(lfs, lfs_smax32(mid, 0));
|
||||
}
|
||||
|
||||
static inline lfsr_srid_t lfsr_mid_crid(lfs_t *lfs, lfsr_smid_t mid) {
|
||||
return (mid < 0) ? -1 : (lfsr_srid_t)lfsr_mid_rid(lfs, mid);
|
||||
static inline lfsr_srid_t lfsr_mid_rid(lfs_t *lfs, lfsr_smid_t mid) {
|
||||
// note this maps mid=-1 => rid=-1 via sign extension
|
||||
return (mid >> (8*sizeof(lfsr_smid_t)-1))
|
||||
| (mid & ((1 << lfs->mbits) - 1));
|
||||
}
|
||||
|
||||
// we use the root's bookmark at 0.0 to represent root
|
||||
@@ -5035,22 +5029,14 @@ static inline void lfsr_mdir_unerase(lfsr_mdir_t *mdir) {
|
||||
lfsr_rbyd_unerase(&mdir->u.rbyd);
|
||||
}
|
||||
|
||||
static inline lfsr_bid_t lfsr_mdir_bid(lfs_t *lfs, const lfsr_mdir_t *mdir) {
|
||||
static inline lfsr_sbid_t lfsr_mdir_bid(lfs_t *lfs, const lfsr_mdir_t *mdir) {
|
||||
return lfsr_mid_bid(lfs, mdir->mid);
|
||||
}
|
||||
|
||||
static inline lfsr_rid_t lfsr_mdir_rid(lfs_t *lfs, const lfsr_mdir_t *mdir) {
|
||||
static inline lfsr_srid_t lfsr_mdir_rid(lfs_t *lfs, const lfsr_mdir_t *mdir) {
|
||||
return lfsr_mid_rid(lfs, mdir->mid);
|
||||
}
|
||||
|
||||
static inline lfsr_bid_t lfsr_mdir_cbid(lfs_t *lfs, const lfsr_mdir_t *mdir) {
|
||||
return lfsr_mid_cbid(lfs, mdir->mid);
|
||||
}
|
||||
|
||||
static inline lfsr_rid_t lfsr_mdir_crid(lfs_t *lfs, const lfsr_mdir_t *mdir) {
|
||||
return lfsr_mid_crid(lfs, mdir->mid);
|
||||
}
|
||||
|
||||
static inline bool lfsr_mdir_isroot(const lfsr_mdir_t *mdir) {
|
||||
return lfsr_mid_isroot(mdir->mid);
|
||||
}
|
||||
@@ -5142,7 +5128,7 @@ static int lfsr_mdir_lookupnext(lfs_t *lfs, const lfsr_mdir_t *mdir,
|
||||
lfsr_smid_t mid_;
|
||||
lfsr_tag_t tag__;
|
||||
int err = lfsr_rbyd_lookupnext(lfs, &mdir->u.rbyd,
|
||||
lfsr_mid_crid(lfs, mid), tag,
|
||||
lfsr_mid_rid(lfs, mid), tag,
|
||||
&mid_, &tag__, NULL, data_);
|
||||
if (err) {
|
||||
return err;
|
||||
@@ -5150,7 +5136,7 @@ static int lfsr_mdir_lookupnext(lfs_t *lfs, const lfsr_mdir_t *mdir,
|
||||
|
||||
// this is very similar to lfsr_rbyd_lookupnext, but we error if
|
||||
// lookupnext would change mids
|
||||
if (mid_ != lfsr_mid_crid(lfs, mid)) {
|
||||
if (mid_ != lfsr_mid_rid(lfs, mid)) {
|
||||
return LFS_ERR_NOENT;
|
||||
}
|
||||
|
||||
@@ -5164,7 +5150,7 @@ static int lfsr_mdir_lookup(lfs_t *lfs, const lfsr_mdir_t *mdir,
|
||||
lfsr_smid_t mid, lfsr_tag_t tag,
|
||||
lfsr_tag_t *tag_, lfsr_data_t *data_) {
|
||||
return lfsr_rbyd_lookup(lfs, &mdir->u.rbyd,
|
||||
lfsr_mid_crid(lfs, mid), tag,
|
||||
lfsr_mid_rid(lfs, mid), tag,
|
||||
tag_, data_);
|
||||
}
|
||||
|
||||
@@ -5250,7 +5236,7 @@ static int lfsr_mtree_lookup(lfs_t *lfs, lfsr_smid_t mid,
|
||||
if (err) {
|
||||
return err;
|
||||
}
|
||||
LFS_ASSERT(bid == lfsr_mid_bid(lfs, mid));
|
||||
LFS_ASSERT((lfsr_sbid_t)bid == lfsr_mid_bid(lfs, mid));
|
||||
LFS_ASSERT(tag == LFSR_TAG_MDIR);
|
||||
|
||||
// decode mdir
|
||||
@@ -5426,7 +5412,7 @@ static int lfsr_mdir_commit__(lfs_t *lfs, lfsr_mdir_t *mdir,
|
||||
lfsr_mdir_unerase(mdir);
|
||||
for (lfs_size_t i = 0; i < attr_count; i++) {
|
||||
// calculate adjusted rid
|
||||
lfsr_srid_t rid = lfsr_mid_crid(lfs, attrs[i].rid);
|
||||
lfsr_srid_t rid = lfsr_mid_rid(lfs, attrs[i].rid);
|
||||
|
||||
// don't write tags outside of the requested range
|
||||
if (rid >= start_rid
|
||||
@@ -5556,7 +5542,7 @@ static int lfsr_mdir_commit__(lfs_t *lfs, lfsr_mdir_t *mdir,
|
||||
// upper layers.
|
||||
if (mdir_.u.m.weight == 0
|
||||
// unless we are an mroot
|
||||
&& !(mdir_.mid == -1 || lfsr_mtree_isnull(lfs))) {
|
||||
&& !(mdir_.mid == -1 || lfsr_mdir_cmp(&mdir_, &lfs->mroot) == 0)) {
|
||||
// mark weight as zero, but note! we can not longer read from this mdir
|
||||
// as our pcache may get clobbered
|
||||
mdir->u.m.weight = 0;
|
||||
@@ -5735,8 +5721,9 @@ static int lfsr_mdir_compact__(lfs_t *lfs, lfsr_mdir_t *mdir_,
|
||||
// belongs to our mdir?
|
||||
if (lfsr_file_isunsynced(file)
|
||||
&& lfsr_mdir_cmp(&file->m.mdir, mdir) == 0
|
||||
&& (lfsr_srid_t)lfsr_mdir_rid(lfs, &file->m.mdir) >= start_rid
|
||||
&& lfsr_mdir_rid(lfs, &file->m.mdir) < (lfsr_rid_t)end_rid) {
|
||||
&& lfsr_mdir_rid(lfs, &file->m.mdir) >= start_rid
|
||||
&& (lfsr_rid_t)lfsr_mdir_rid(lfs, &file->m.mdir)
|
||||
< (lfsr_rid_t)end_rid) {
|
||||
// inlined sprout?
|
||||
if (lfsr_file_isbsprout(file)) {
|
||||
// write the data as a shrub tag
|
||||
@@ -6262,8 +6249,7 @@ static int lfsr_mdir_commit(lfs_t *lfs, lfsr_mdir_t *mdir,
|
||||
LFS_ASSERT(mdir->mid == -1
|
||||
|| lfsr_mtree_isnull(lfs)
|
||||
|| mdir->u.m.weight > 0);
|
||||
LFS_ASSERT(mdir->mid == -1
|
||||
|| lfsr_mdir_rid(lfs, mdir) <= (lfsr_rid_t)mdir->u.m.weight);
|
||||
LFS_ASSERT(lfsr_mdir_rid(lfs, mdir) <= mdir->u.m.weight);
|
||||
|
||||
// parse out any pending gstate, these will get automatically xored
|
||||
// with on-disk gdeltas in lower-level functions
|
||||
@@ -6362,8 +6348,7 @@ static int lfsr_mdir_commit(lfs_t *lfs, lfsr_mdir_t *mdir,
|
||||
}
|
||||
|
||||
// compact into new mdir tags < split_rid
|
||||
err = lfsr_mdir_alloc(lfs, &mdir_,
|
||||
lfs_smax32(mdir->mid, 0));
|
||||
err = lfsr_mdir_alloc(lfs, &mdir_, lfs_smax32(mdir->mid, 0));
|
||||
if (err) {
|
||||
return err;
|
||||
}
|
||||
@@ -6382,8 +6367,7 @@ static int lfsr_mdir_commit(lfs_t *lfs, lfsr_mdir_t *mdir,
|
||||
}
|
||||
|
||||
// compact into new mdir tags >= split_rid
|
||||
err = lfsr_mdir_alloc(lfs, &msibling_,
|
||||
lfs_smax32(mdir->mid, 0));
|
||||
err = lfsr_mdir_alloc(lfs, &msibling_, lfs_smax32(mdir->mid, 0));
|
||||
if (err) {
|
||||
return err;
|
||||
}
|
||||
@@ -6470,9 +6454,9 @@ static int lfsr_mdir_commit(lfs_t *lfs, lfsr_mdir_t *mdir,
|
||||
// fix our grm
|
||||
for (int j = 0; j < 2; j++) {
|
||||
if (lfsr_mid_bid(lfs, grm->rms[j])
|
||||
== lfsr_mdir_cbid(lfs, mdir)) {
|
||||
== lfsr_mid_bid(lfs, lfs_smax32(mdir->mid, 0))) {
|
||||
if (lfsr_mid_rid(lfs, grm->rms[j])
|
||||
>= (lfsr_rid_t)mdir_.u.m.weight) {
|
||||
>= mdir_.u.m.weight) {
|
||||
grm->rms[j] += lfsr_mweight(lfs)
|
||||
- mdir_.u.m.weight;
|
||||
}
|
||||
@@ -6609,7 +6593,7 @@ static int lfsr_mdir_commit(lfs_t *lfs, lfsr_mdir_t *mdir,
|
||||
|
||||
// need to relocate?
|
||||
} else if (lfsr_mdir_cmp(mdir, &mdir_) != 0
|
||||
&& !(mdir->mid == -1 || lfsr_mtree_isnull(lfs))) {
|
||||
&& lfsr_mdir_cmp(&mdir_, &lfs->mroot) != 0) {
|
||||
LFS_DEBUG("Relocating mdir %"PRId32" "
|
||||
"0x{%"PRIx32",%"PRIx32"} -> 0x{%"PRIx32",%"PRIx32"}",
|
||||
mdir->mid >> lfs->mbits,
|
||||
@@ -6682,8 +6666,7 @@ static int lfsr_mdir_commit(lfs_t *lfs, lfsr_mdir_t *mdir,
|
||||
// first play out any attrs that change our rid
|
||||
for (lfs_size_t i = 0; i < attr_count; i++) {
|
||||
// adjust opened mdirs?
|
||||
if (lfsr_mdir_bid(lfs, &opened->mdir)
|
||||
== lfsr_mdir_cbid(lfs, mdir)
|
||||
if (lfsr_mdir_cmp(&opened->mdir, mdir) == 0
|
||||
&& opened->mdir.mid >= attrs[i].rid) {
|
||||
// removed?
|
||||
if (opened->mdir.mid < attrs[i].rid - attrs[i].delta) {
|
||||
@@ -6715,7 +6698,7 @@ static int lfsr_mdir_commit(lfs_t *lfs, lfsr_mdir_t *mdir,
|
||||
if (lfsr_mdir_cmp(&opened->mdir, mdir) == 0) {
|
||||
if (mdelta > 0
|
||||
&& lfsr_mdir_rid(lfs, &opened->mdir)
|
||||
>= (lfsr_rid_t)mdir_.u.m.weight) {
|
||||
>= mdir_.u.m.weight) {
|
||||
opened->mdir.mid += lfsr_mweight(lfs)
|
||||
- mdir_.u.m.weight;
|
||||
opened->mdir.u.m = msibling_.u.m;
|
||||
@@ -6734,7 +6717,7 @@ static int lfsr_mdir_commit(lfs_t *lfs, lfsr_mdir_t *mdir,
|
||||
// TODO clean this up a bit?
|
||||
// adjust opened mdirs?
|
||||
if (lfsr_mid_bid(lfs, dir->bookmark)
|
||||
== lfsr_mdir_cbid(lfs, mdir)
|
||||
== lfsr_mid_bid(lfs, lfs_smax32(mdir->mid, 0))
|
||||
&& dir->bookmark >= attrs[i].rid) {
|
||||
// removed?
|
||||
if (dir->bookmark < attrs[i].rid - attrs[i].delta) {
|
||||
@@ -6754,10 +6737,10 @@ static int lfsr_mdir_commit(lfs_t *lfs, lfsr_mdir_t *mdir,
|
||||
}
|
||||
|
||||
if (lfsr_mid_bid(lfs, dir->bookmark)
|
||||
== lfsr_mdir_cbid(lfs, mdir)) {
|
||||
== lfsr_mid_bid(lfs, lfs_smax32(mdir->mid, 0))) {
|
||||
if (mdelta > 0
|
||||
&& lfsr_mid_rid(lfs, dir->bookmark)
|
||||
>= (lfsr_rid_t)mdir_.u.m.weight) {
|
||||
>= mdir_.u.m.weight) {
|
||||
dir->bookmark += lfsr_mweight(lfs)
|
||||
- mdir_.u.m.weight;
|
||||
}
|
||||
@@ -6773,7 +6756,7 @@ static int lfsr_mdir_commit(lfs_t *lfs, lfsr_mdir_t *mdir,
|
||||
if (mdir->mid == -1) {
|
||||
mdir->u.m = lfs->mroot.u.m;
|
||||
} else if (mdelta > 0
|
||||
&& lfsr_mdir_rid(lfs, mdir) >= (lfsr_rid_t)mdir_.u.m.weight) {
|
||||
&& lfsr_mdir_rid(lfs, mdir) >= mdir_.u.m.weight) {
|
||||
mdir->mid += lfsr_mweight(lfs) - mdir_.u.m.weight;
|
||||
mdir->u.m = msibling_.u.m;
|
||||
} else {
|
||||
@@ -7323,7 +7306,7 @@ static int lfsr_traversal_read(lfs_t *lfs, lfsr_traversal_t *traversal,
|
||||
// return to mtree traversal
|
||||
if (!lfsr_traversal_isall(traversal)
|
||||
|| lfsr_mdir_rid(lfs, &traversal->mdir)
|
||||
>= (lfsr_rid_t)traversal->mdir.u.m.weight) {
|
||||
>= traversal->mdir.u.m.weight) {
|
||||
traversal->state = LFSR_TRAVERSAL_MTREE;
|
||||
continue;
|
||||
}
|
||||
@@ -8378,8 +8361,7 @@ static int lfsr_fs_fixgrm(lfs_t *lfs) {
|
||||
}
|
||||
|
||||
// remove the rid while also updating our grm
|
||||
LFS_ASSERT(lfsr_mid_rid(lfs, lfs->grm.rms[0])
|
||||
< (lfsr_rid_t)mdir.u.m.weight);
|
||||
LFS_ASSERT(lfsr_mid_rid(lfs, lfs->grm.rms[0]) < mdir.u.m.weight);
|
||||
err = lfsr_mdir_commit(lfs, &mdir, LFSR_ATTRS(
|
||||
LFSR_ATTR(mdir.mid, RM, -1, NULL),
|
||||
LFSR_ATTR(-1, GRM, 0, GRM(&grm))));
|
||||
|
||||
+23
-29
@@ -450,7 +450,7 @@ code = '''
|
||||
mid += lfsr_mweight(&lfs)) {
|
||||
lfsr_mdir_t mdir;
|
||||
lfsr_mtree_lookup(&lfs, mid, &mdir) => 0;
|
||||
for (; lfsr_mdir_rid(&lfs, &mdir) < (lfsr_rid_t)mdir.u.m.weight;
|
||||
for (; lfsr_mdir_rid(&lfs, &mdir) < mdir.u.m.weight;
|
||||
mdir.mid += 1) {
|
||||
uint8_t buffer[4];
|
||||
lfsr_mdir_get(&lfs, &mdir, mdir.mid, LFSR_TAG_REG,
|
||||
@@ -476,7 +476,7 @@ code = '''
|
||||
mid += lfsr_mweight(&lfs)) {
|
||||
lfsr_mdir_t mdir;
|
||||
lfsr_mtree_lookup(&lfs, mid, &mdir) => 0;
|
||||
for (; lfsr_mdir_rid(&lfs, &mdir) < (lfsr_rid_t)mdir.u.m.weight;
|
||||
for (; lfsr_mdir_rid(&lfs, &mdir) < mdir.u.m.weight;
|
||||
mdir.mid += 1) {
|
||||
uint8_t buffer[4];
|
||||
lfsr_mdir_get(&lfs, &mdir, mdir.mid, LFSR_TAG_REG,
|
||||
@@ -554,7 +554,7 @@ code = '''
|
||||
mid += lfsr_mweight(&lfs)) {
|
||||
lfsr_mdir_t mdir;
|
||||
lfsr_mtree_lookup(&lfs, mid, &mdir) => 0;
|
||||
for (; lfsr_mdir_rid(&lfs, &mdir) < (lfsr_rid_t)mdir.u.m.weight;
|
||||
for (; lfsr_mdir_rid(&lfs, &mdir) < mdir.u.m.weight;
|
||||
mdir.mid += 1) {
|
||||
uint8_t buffer[4];
|
||||
lfsr_mdir_get(&lfs, &mdir, mdir.mid, LFSR_TAG_REG,
|
||||
@@ -584,7 +584,7 @@ code = '''
|
||||
mid += lfsr_mweight(&lfs)) {
|
||||
lfsr_mdir_t mdir;
|
||||
lfsr_mtree_lookup(&lfs, mid, &mdir) => 0;
|
||||
for (; lfsr_mdir_rid(&lfs, &mdir) < (lfsr_rid_t)mdir.u.m.weight;
|
||||
for (; lfsr_mdir_rid(&lfs, &mdir) < mdir.u.m.weight;
|
||||
mdir.mid += 1) {
|
||||
uint8_t buffer[4];
|
||||
lfsr_mdir_get(&lfs, &mdir, mdir.mid, LFSR_TAG_REG,
|
||||
@@ -1322,7 +1322,7 @@ code = '''
|
||||
mid += lfsr_mweight(&lfs)) {
|
||||
lfsr_mdir_t mdir;
|
||||
lfsr_mtree_lookup(&lfs, mid, &mdir) => 0;
|
||||
for (; lfsr_mdir_rid(&lfs, &mdir) < (lfsr_rid_t)mdir.u.m.weight;
|
||||
for (; lfsr_mdir_rid(&lfs, &mdir) < mdir.u.m.weight;
|
||||
mdir.mid += 1) {
|
||||
uint8_t buffer[4];
|
||||
lfsr_mdir_get(&lfs, &mdir, mdir.mid, LFSR_TAG_REG,
|
||||
@@ -1348,7 +1348,7 @@ code = '''
|
||||
mid += lfsr_mweight(&lfs)) {
|
||||
lfsr_mdir_t mdir;
|
||||
lfsr_mtree_lookup(&lfs, mid, &mdir) => 0;
|
||||
for (; lfsr_mdir_rid(&lfs, &mdir) < (lfsr_rid_t)mdir.u.m.weight;
|
||||
for (; lfsr_mdir_rid(&lfs, &mdir) < mdir.u.m.weight;
|
||||
mdir.mid += 1) {
|
||||
uint8_t buffer[4];
|
||||
lfsr_mdir_get(&lfs, &mdir, mdir.mid, LFSR_TAG_REG,
|
||||
@@ -1410,7 +1410,7 @@ code = '''
|
||||
mid += lfsr_mweight(&lfs)) {
|
||||
lfsr_mdir_t mdir;
|
||||
lfsr_mtree_lookup(&lfs, mid, &mdir) => 0;
|
||||
for (; lfsr_mdir_rid(&lfs, &mdir) < (lfsr_rid_t)mdir.u.m.weight;
|
||||
for (; lfsr_mdir_rid(&lfs, &mdir) < mdir.u.m.weight;
|
||||
mdir.mid += 1) {
|
||||
uint8_t buffer[4];
|
||||
lfsr_mdir_get(&lfs, &mdir, mdir.mid, LFSR_TAG_REG,
|
||||
@@ -1449,7 +1449,7 @@ code = '''
|
||||
mid += lfsr_mweight(&lfs)) {
|
||||
lfsr_mdir_t mdir;
|
||||
lfsr_mtree_lookup(&lfs, mid, &mdir) => 0;
|
||||
for (; lfsr_mdir_rid(&lfs, &mdir) < (lfsr_rid_t)mdir.u.m.weight;
|
||||
for (; lfsr_mdir_rid(&lfs, &mdir) < mdir.u.m.weight;
|
||||
mdir.mid += 1) {
|
||||
uint8_t buffer[4];
|
||||
lfsr_mdir_get(&lfs, &mdir, mdir.mid, LFSR_TAG_REG,
|
||||
@@ -1476,7 +1476,7 @@ code = '''
|
||||
mid += lfsr_mweight(&lfs)) {
|
||||
lfsr_mdir_t mdir;
|
||||
lfsr_mtree_lookup(&lfs, mid, &mdir) => 0;
|
||||
for (; lfsr_mdir_rid(&lfs, &mdir) < (lfsr_rid_t)mdir.u.m.weight;
|
||||
for (; lfsr_mdir_rid(&lfs, &mdir) < mdir.u.m.weight;
|
||||
mdir.mid += 1) {
|
||||
uint8_t buffer[4];
|
||||
lfsr_mdir_get(&lfs, &mdir, mdir.mid, LFSR_TAG_REG,
|
||||
@@ -1523,12 +1523,9 @@ code = '''
|
||||
mdir.mid = lfsr_mdir_bid(&lfs, &mdir)-(lfsr_mweight(&lfs)-1)
|
||||
+ (mdir.mid % (mdir.u.m.weight+1));
|
||||
// choose to create or delete, note we make sure to never delete to zero
|
||||
uint8_t op = (lfsr_mdir_rid(&lfs, &mdir)
|
||||
== (lfsr_rid_t)mdir.u.m.weight
|
||||
|| (lfsr_mdir_rid(&lfs, &mdir)
|
||||
== (lfsr_rid_t)mdir.u.m.weight-1
|
||||
&& lfsr_mtree_weight(&lfs)
|
||||
== lfsr_mweight(&lfs))
|
||||
uint8_t op = (lfsr_mdir_rid(&lfs, &mdir) == mdir.u.m.weight
|
||||
|| (lfsr_mdir_rid(&lfs, &mdir) == mdir.u.m.weight-1
|
||||
&& lfsr_mtree_weight(&lfs) == lfsr_mweight(&lfs))
|
||||
? 0
|
||||
: TEST_PRNG(&prng) % 2);
|
||||
|
||||
@@ -1576,7 +1573,7 @@ code = '''
|
||||
// drop should make sure we never have empty mdirs
|
||||
assert(lfsr_mtree_ismptr(&lfs) || mdir.u.m.weight > 0);
|
||||
|
||||
for (; lfsr_mdir_rid(&lfs, &mdir) < (lfsr_rid_t)mdir.u.m.weight;
|
||||
for (; lfsr_mdir_rid(&lfs, &mdir) < mdir.u.m.weight;
|
||||
mdir.mid += 1) {
|
||||
uint8_t buffer[4];
|
||||
lfsr_mdir_get(&lfs, &mdir, mdir.mid, LFSR_TAG_REG,
|
||||
@@ -1610,7 +1607,7 @@ code = '''
|
||||
// drop should make sure we never have empty mdirs
|
||||
assert(lfsr_mtree_ismptr(&lfs) || mdir.u.m.weight > 0);
|
||||
|
||||
for (; lfsr_mdir_rid(&lfs, &mdir) < (lfsr_rid_t)mdir.u.m.weight;
|
||||
for (; lfsr_mdir_rid(&lfs, &mdir) < mdir.u.m.weight;
|
||||
mdir.mid += 1) {
|
||||
uint8_t buffer[4];
|
||||
lfsr_mdir_get(&lfs, &mdir, mdir.mid, LFSR_TAG_REG,
|
||||
@@ -2609,12 +2606,9 @@ code = '''
|
||||
mdir.mid = lfsr_mdir_bid(&lfs, &mdir)-(lfsr_mweight(&lfs)-1)
|
||||
+ (mdir.mid % (mdir.u.m.weight+1));
|
||||
// choose to create or delete, note we make sure to never delete to zero
|
||||
uint8_t op = (lfsr_mdir_rid(&lfs, &mdir)
|
||||
== (lfsr_rid_t)mdir.u.m.weight
|
||||
|| (lfsr_mdir_rid(&lfs, &mdir)
|
||||
== (lfsr_rid_t)mdir.u.m.weight-1
|
||||
&& lfsr_mtree_weight(&lfs)
|
||||
== lfsr_mweight(&lfs))
|
||||
uint8_t op = (lfsr_mdir_rid(&lfs, &mdir) == mdir.u.m.weight
|
||||
|| (lfsr_mdir_rid(&lfs, &mdir) == mdir.u.m.weight-1
|
||||
&& lfsr_mtree_weight(&lfs) == lfsr_mweight(&lfs))
|
||||
? 0
|
||||
: TEST_PRNG(&prng) % 3);
|
||||
|
||||
@@ -2675,7 +2669,7 @@ code = '''
|
||||
// drop should make sure we never have empty mdirs
|
||||
assert(lfsr_mtree_ismptr(&lfs) || mdir.u.m.weight > 0);
|
||||
|
||||
for (; lfsr_mdir_rid(&lfs, &mdir) < (lfsr_rid_t)mdir.u.m.weight;
|
||||
for (; lfsr_mdir_rid(&lfs, &mdir) < mdir.u.m.weight;
|
||||
mdir.mid += 1) {
|
||||
uint8_t buffer[4];
|
||||
lfsr_mdir_get(&lfs, &mdir, mdir.mid, LFSR_TAG_REG,
|
||||
@@ -2709,7 +2703,7 @@ code = '''
|
||||
// drop should make sure we never have empty mdirs
|
||||
assert(lfsr_mtree_ismptr(&lfs) || mdir.u.m.weight > 0);
|
||||
|
||||
for (; lfsr_mdir_rid(&lfs, &mdir) < (lfsr_rid_t)mdir.u.m.weight;
|
||||
for (; lfsr_mdir_rid(&lfs, &mdir) < mdir.u.m.weight;
|
||||
mdir.mid += 1) {
|
||||
uint8_t buffer[4];
|
||||
lfsr_mdir_get(&lfs, &mdir, mdir.mid, LFSR_TAG_REG,
|
||||
@@ -3966,7 +3960,7 @@ code = '''
|
||||
mid += lfsr_mweight(&lfs)) {
|
||||
lfsr_mdir_t mdir;
|
||||
lfsr_mtree_lookup(&lfs, mid, &mdir) => 0;
|
||||
for (; lfsr_mdir_rid(&lfs, &mdir) < (lfsr_rid_t)mdir.u.m.weight;
|
||||
for (; lfsr_mdir_rid(&lfs, &mdir) < mdir.u.m.weight;
|
||||
mdir.mid += 1) {
|
||||
uint8_t buffer[4];
|
||||
lfsr_mdir_get(&lfs, &mdir, mdir.mid, LFSR_TAG_REG,
|
||||
@@ -4042,7 +4036,7 @@ code = '''
|
||||
mid += lfsr_mweight(&lfs)) {
|
||||
lfsr_mdir_t mdir;
|
||||
lfsr_mtree_lookup(&lfs, mid, &mdir) => 0;
|
||||
for (; lfsr_mdir_rid(&lfs, &mdir) < (lfsr_rid_t)mdir.u.m.weight;
|
||||
for (; lfsr_mdir_rid(&lfs, &mdir) < mdir.u.m.weight;
|
||||
mdir.mid += 1) {
|
||||
uint8_t buffer[4];
|
||||
lfsr_mdir_get(&lfs, &mdir, mdir.mid, LFSR_TAG_REG,
|
||||
@@ -4120,7 +4114,7 @@ code = '''
|
||||
mid += lfsr_mweight(&lfs)) {
|
||||
lfsr_mdir_t mdir;
|
||||
lfsr_mtree_lookup(&lfs, mid, &mdir) => 0;
|
||||
for (; lfsr_mdir_rid(&lfs, &mdir) < (lfsr_rid_t)mdir.u.m.weight;
|
||||
for (; lfsr_mdir_rid(&lfs, &mdir) < mdir.u.m.weight;
|
||||
mdir.mid += 1) {
|
||||
uint8_t buffer[4];
|
||||
lfsr_mdir_get(&lfs, &mdir, mdir.mid, LFSR_TAG_REG,
|
||||
@@ -4201,7 +4195,7 @@ code = '''
|
||||
mid += lfsr_mweight(&lfs)) {
|
||||
lfsr_mdir_t mdir;
|
||||
lfsr_mtree_lookup(&lfs, mid, &mdir) => 0;
|
||||
for (; lfsr_mdir_rid(&lfs, &mdir) < (lfsr_rid_t)mdir.u.m.weight;
|
||||
for (; lfsr_mdir_rid(&lfs, &mdir) < mdir.u.m.weight;
|
||||
mdir.mid += 1) {
|
||||
uint8_t buffer[4];
|
||||
lfsr_mdir_get(&lfs, &mdir, mdir.mid, LFSR_TAG_REG,
|
||||
|
||||
Reference in New Issue
Block a user