Changed lfsr_data_t internals, added LFSR_DATA_CAT
The main purpose of this change is to introduce LFSR_DATA_CAT, a
generalized way to concatenated various data references internally.
As a side-effect lfsr_data_t has been completely restructured. Now,
lfsr_data_t can be in one of 4 modes:
If the size field's sign bit=0, the lfsr_data_t points in-device. A new,
count field, determines the encoding:
sign(size)=0, count=0 => inlined:
.---+---+---+---.
| size |
|---+---+---+---|
|c=0| inlined d | note inlined data is just enough to hold
|---+ | one encoded leb128
| ata... |
'---------------'
sign(size)=1, count=1 => direct:
.---+---+---+---. .---+---+---+---.
| size | .>| data... |
|---+---+---+---| | | . |
|c=1| | | . . .
|---+---+---+---| | . . .
| direct ptr -----' . .
'---------------'
sign(size)=1, count>=2 => indirect:
.---+---+---+---. .---+---+---+---. .---+---+---+---.
| size | .>| size | .>| data... |
|---+---+---+---| | |---+---+---+---| | | . |
|c>1| | | |c=1| | | . . .
|---+---+---+---| | |---+---+---+---| | . . .
| indirect ptr ---' | direct ptr -----' . .
'---------------' '---------------' .---+---+---+---.
| size | .>| data... |
|---+---+---+---| | | . |
|c=1| | | . . .
|---+---+---+---| | . . .
| direct ptr -----' . .
'---+---+---+---'
| . |
| . |
. . .
. .
. .
note only one indirect layer is allowed due to no recursion
If the size field's sign bit=1, the lfsr_data_t points on-disk:
sign(size)=0 => on-disk:
.---+---+---+---. .....
| size | ..'' ''..
|---+---+---+---| : : :
| block ------+->| ..:|
|---+---+---+---| | |......( )::::::|
| off -------' |:::' : |
'---------------' :' : :
''.. :.''
'''''
My goal with this commit was to test the new implementation and see how
it would impact code/RAM size before adopting it in the actual file
handling code, and the results are... not great...
code stack
before: 24668 1840
after: 25552 (+3.5%) 1920 (+4.2%)
I think most of the new cost comes from the now correct handling of
read/cmp with concatentated datas, which previously would just assert.
This change gives us LFSR_DATA_CAT, so I will be working with it for
now, but this may be worth looking at again in the future. Maybe the
correct handling of read/cmp should just be reverted to an assert...
This commit is contained in:
+160
-151
@@ -147,7 +147,7 @@ code = '''
|
||||
// create a single-entry tree
|
||||
lfsr_btree_t btree = LFSR_BTREE_NULL;
|
||||
lfsr_btree_push(&lfs, &btree, 0, LFSR_TAG_INLINED, 1,
|
||||
LFSR_DATA("a", 1)) => 0;
|
||||
LFSR_DATA_BUF("a", 1)) => 0;
|
||||
printf("btree: w%d 0x%x.%x\n",
|
||||
btree.u.rbyd.weight,
|
||||
btree.u.rbyd.block,
|
||||
@@ -186,9 +186,9 @@ code = '''
|
||||
// create a two-entry tree
|
||||
lfsr_btree_t btree = LFSR_BTREE_NULL;
|
||||
lfsr_btree_push(&lfs, &btree, 0, LFSR_TAG_INLINED, 1,
|
||||
LFSR_DATA("a", 1)) => 0;
|
||||
LFSR_DATA_BUF("a", 1)) => 0;
|
||||
lfsr_btree_push(&lfs, &btree, 1, LFSR_TAG_INLINED, 1,
|
||||
LFSR_DATA("b", 1)) => 0;
|
||||
LFSR_DATA_BUF("b", 1)) => 0;
|
||||
printf("btree: w%d 0x%x.%x\n",
|
||||
btree.u.rbyd.weight,
|
||||
btree.u.rbyd.block,
|
||||
@@ -232,9 +232,9 @@ code = '''
|
||||
// create a two-entry tree
|
||||
lfsr_btree_t btree = LFSR_BTREE_NULL;
|
||||
lfsr_btree_push(&lfs, &btree, 0, LFSR_TAG_INLINED, 1,
|
||||
LFSR_DATA("b", 1)) => 0;
|
||||
LFSR_DATA_BUF("b", 1)) => 0;
|
||||
lfsr_btree_push(&lfs, &btree, 0, LFSR_TAG_INLINED, 1,
|
||||
LFSR_DATA("a", 1)) => 0;
|
||||
LFSR_DATA_BUF("a", 1)) => 0;
|
||||
printf("btree: w%d 0x%x.%x\n",
|
||||
btree.u.rbyd.weight,
|
||||
btree.u.rbyd.block,
|
||||
@@ -279,11 +279,11 @@ code = '''
|
||||
// create a two-entry tree
|
||||
lfsr_btree_t btree = LFSR_BTREE_NULL;
|
||||
lfsr_btree_push(&lfs, &btree, 0, LFSR_TAG_INLINED, 1,
|
||||
LFSR_DATA("a", 1)) => 0;
|
||||
LFSR_DATA_BUF("a", 1)) => 0;
|
||||
lfsr_btree_push(&lfs, &btree, 1, LFSR_TAG_INLINED, 1,
|
||||
LFSR_DATA("b", 1)) => 0;
|
||||
LFSR_DATA_BUF("b", 1)) => 0;
|
||||
lfsr_btree_push(&lfs, &btree, 2, LFSR_TAG_INLINED, 1,
|
||||
LFSR_DATA("c", 1)) => 0;
|
||||
LFSR_DATA_BUF("c", 1)) => 0;
|
||||
printf("btree: w%d 0x%x.%x\n",
|
||||
btree.u.rbyd.weight,
|
||||
btree.u.rbyd.block,
|
||||
@@ -333,11 +333,11 @@ code = '''
|
||||
// create a two-entry tree
|
||||
lfsr_btree_t btree = LFSR_BTREE_NULL;
|
||||
lfsr_btree_push(&lfs, &btree, 0, LFSR_TAG_INLINED, 1,
|
||||
LFSR_DATA("c", 1)) => 0;
|
||||
LFSR_DATA_BUF("c", 1)) => 0;
|
||||
lfsr_btree_push(&lfs, &btree, 0, LFSR_TAG_INLINED, 1,
|
||||
LFSR_DATA("b", 1)) => 0;
|
||||
LFSR_DATA_BUF("b", 1)) => 0;
|
||||
lfsr_btree_push(&lfs, &btree, 0, LFSR_TAG_INLINED, 1,
|
||||
LFSR_DATA("a", 1)) => 0;
|
||||
LFSR_DATA_BUF("a", 1)) => 0;
|
||||
printf("btree: w%d 0x%x.%x\n",
|
||||
btree.u.rbyd.weight,
|
||||
btree.u.rbyd.block,
|
||||
@@ -393,7 +393,7 @@ code = '''
|
||||
lfs_size_t n = 0;
|
||||
for (lfs_size_t i = 0; i < N; i++) {
|
||||
int err = lfsr_btree_push(&lfs, &btree, i, LFSR_TAG_INLINED, 1,
|
||||
LFSR_DATA(&alphas[i % 26], 1));
|
||||
LFSR_DATA_BUF(&alphas[i % 26], 1));
|
||||
// ignore space issues
|
||||
if (err == LFS_ERR_NOSPC) {
|
||||
break;
|
||||
@@ -445,7 +445,7 @@ code = '''
|
||||
lfs_size_t n = 0;
|
||||
for (lfs_size_t i = 0; i < N; i++) {
|
||||
int err = lfsr_btree_push(&lfs, &btree, 0, LFSR_TAG_INLINED, 1,
|
||||
LFSR_DATA(&alphas[(N-1-i) % 26], 1));
|
||||
LFSR_DATA_BUF(&alphas[(N-1-i) % 26], 1));
|
||||
// ignore space issues
|
||||
if (err == LFS_ERR_NOSPC) {
|
||||
break;
|
||||
@@ -512,7 +512,7 @@ code = '''
|
||||
|
||||
// add to btree
|
||||
int err = lfsr_btree_push(&lfs, &btree, bid, LFSR_TAG_INLINED, 1,
|
||||
LFSR_DATA(&alphas[i % 26], 1));
|
||||
LFSR_DATA_BUF(&alphas[i % 26], 1));
|
||||
// ignore space issues
|
||||
if (err == LFS_ERR_NOSPC) {
|
||||
break;
|
||||
@@ -583,7 +583,7 @@ code = '''
|
||||
lfs_size_t n = 0;
|
||||
for (lfs_size_t i = 0; i < N; i++) {
|
||||
int err = lfsr_btree_push(&lfs, &btree, i*W, LFSR_TAG_INLINED, W,
|
||||
LFSR_DATA(&alphas[i % 26], 1));
|
||||
LFSR_DATA_BUF(&alphas[i % 26], 1));
|
||||
// ignore space issues
|
||||
if (err == LFS_ERR_NOSPC) {
|
||||
break;
|
||||
@@ -678,7 +678,7 @@ code = '''
|
||||
// add to btree
|
||||
int err = lfsr_btree_push(&lfs, &btree,
|
||||
weighted_bid, LFSR_TAG_INLINED, weight,
|
||||
LFSR_DATA(&alphas[i % 26], 1));
|
||||
LFSR_DATA_BUF(&alphas[i % 26], 1));
|
||||
// ignore space issues
|
||||
if (err == LFS_ERR_NOSPC) {
|
||||
break;
|
||||
@@ -790,10 +790,10 @@ code = '''
|
||||
// create a single-entry tree
|
||||
lfsr_btree_t btree = LFSR_BTREE_NULL;
|
||||
lfsr_btree_push(&lfs, &btree, 0, LFSR_TAG_INLINED, 1,
|
||||
LFSR_DATA("a", 1)) => 0;
|
||||
LFSR_DATA_BUF("a", 1)) => 0;
|
||||
// update the tree
|
||||
lfsr_btree_set(&lfs, &btree, 0, LFSR_TAG_INLINED, 1,
|
||||
LFSR_DATA("A", 1)) => 0;
|
||||
LFSR_DATA_BUF("A", 1)) => 0;
|
||||
printf("btree: w%d 0x%x.%x\n",
|
||||
btree.u.rbyd.weight,
|
||||
btree.u.rbyd.block,
|
||||
@@ -831,14 +831,14 @@ code = '''
|
||||
// create a two-entry tree
|
||||
lfsr_btree_t btree = LFSR_BTREE_NULL;
|
||||
lfsr_btree_push(&lfs, &btree, 0, LFSR_TAG_INLINED, 1,
|
||||
LFSR_DATA("a", 1)) => 0;
|
||||
LFSR_DATA_BUF("a", 1)) => 0;
|
||||
lfsr_btree_push(&lfs, &btree, 1, LFSR_TAG_INLINED, 1,
|
||||
LFSR_DATA("b", 1)) => 0;
|
||||
LFSR_DATA_BUF("b", 1)) => 0;
|
||||
// update the tree
|
||||
lfsr_btree_set(&lfs, &btree, 0, LFSR_TAG_INLINED, 1,
|
||||
LFSR_DATA("A", 1)) => 0;
|
||||
LFSR_DATA_BUF("A", 1)) => 0;
|
||||
lfsr_btree_set(&lfs, &btree, 1, LFSR_TAG_INLINED, 1,
|
||||
LFSR_DATA("B", 1)) => 0;
|
||||
LFSR_DATA_BUF("B", 1)) => 0;
|
||||
printf("btree: w%d 0x%x.%x\n",
|
||||
btree.u.rbyd.weight,
|
||||
btree.u.rbyd.block,
|
||||
@@ -882,18 +882,18 @@ code = '''
|
||||
// create a two-entry tree
|
||||
lfsr_btree_t btree = LFSR_BTREE_NULL;
|
||||
lfsr_btree_push(&lfs, &btree, 0, LFSR_TAG_INLINED, 1,
|
||||
LFSR_DATA("a", 1)) => 0;
|
||||
LFSR_DATA_BUF("a", 1)) => 0;
|
||||
lfsr_btree_push(&lfs, &btree, 1, LFSR_TAG_INLINED, 1,
|
||||
LFSR_DATA("b", 1)) => 0;
|
||||
LFSR_DATA_BUF("b", 1)) => 0;
|
||||
lfsr_btree_push(&lfs, &btree, 2, LFSR_TAG_INLINED, 1,
|
||||
LFSR_DATA("c", 1)) => 0;
|
||||
LFSR_DATA_BUF("c", 1)) => 0;
|
||||
// update the tree
|
||||
lfsr_btree_set(&lfs, &btree, 0, LFSR_TAG_INLINED, 1,
|
||||
LFSR_DATA("A", 1)) => 0;
|
||||
LFSR_DATA_BUF("A", 1)) => 0;
|
||||
lfsr_btree_set(&lfs, &btree, 1, LFSR_TAG_INLINED, 1,
|
||||
LFSR_DATA("B", 1)) => 0;
|
||||
LFSR_DATA_BUF("B", 1)) => 0;
|
||||
lfsr_btree_set(&lfs, &btree, 2, LFSR_TAG_INLINED, 1,
|
||||
LFSR_DATA("C", 1)) => 0;
|
||||
LFSR_DATA_BUF("C", 1)) => 0;
|
||||
printf("btree: w%d 0x%x.%x\n",
|
||||
btree.u.rbyd.weight,
|
||||
btree.u.rbyd.block,
|
||||
@@ -947,7 +947,7 @@ code = '''
|
||||
const char *uppers = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
|
||||
for (lfs_size_t i = 0; i < N; i++) {
|
||||
int err = lfsr_btree_push(&lfs, &btree, i, LFSR_TAG_INLINED, 1,
|
||||
LFSR_DATA(&alphas[i % 26], 1));
|
||||
LFSR_DATA_BUF(&alphas[i % 26], 1));
|
||||
// ignore space issues
|
||||
if (err == LFS_ERR_NOSPC) {
|
||||
printf("btree: w%d 0x%x.%x\n",
|
||||
@@ -961,7 +961,7 @@ code = '''
|
||||
// update the tree
|
||||
for (lfs_size_t i = 0; i < N; i++) {
|
||||
int err = lfsr_btree_set(&lfs, &btree, i, LFSR_TAG_INLINED, 1,
|
||||
LFSR_DATA(&uppers[i % 26], 1));
|
||||
LFSR_DATA_BUF(&uppers[i % 26], 1));
|
||||
// ignore space issues
|
||||
if (err == LFS_ERR_NOSPC) {
|
||||
printf("btree: w%d 0x%x.%x\n",
|
||||
@@ -1019,7 +1019,7 @@ code = '''
|
||||
lfsr_btree_t btree = LFSR_BTREE_NULL;
|
||||
for (lfs_size_t i = 0; i < N; i++) {
|
||||
int err = lfsr_btree_push(&lfs, &btree, i, LFSR_TAG_INLINED, 1,
|
||||
LFSR_DATA(&alphas[i % 26], 1));
|
||||
LFSR_DATA_BUF(&alphas[i % 26], 1));
|
||||
// ignore space issues
|
||||
if (err == LFS_ERR_NOSPC) {
|
||||
printf("btree: w%d 0x%x.%x\n",
|
||||
@@ -1047,7 +1047,7 @@ code = '''
|
||||
|
||||
// update btree
|
||||
int err = lfsr_btree_set(&lfs, &btree, bid, LFSR_TAG_INLINED, 1,
|
||||
LFSR_DATA(&uppers[i % 26], 1));
|
||||
LFSR_DATA_BUF(&uppers[i % 26], 1));
|
||||
// ignore space issues
|
||||
if (err == LFS_ERR_NOSPC) {
|
||||
break;
|
||||
@@ -1115,7 +1115,7 @@ code = '''
|
||||
const char *uppers = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
|
||||
for (lfs_size_t i = 0; i < N; i++) {
|
||||
int err = lfsr_btree_push(&lfs, &btree, i*W, LFSR_TAG_INLINED, W,
|
||||
LFSR_DATA(&alphas[i % 26], 1));
|
||||
LFSR_DATA_BUF(&alphas[i % 26], 1));
|
||||
// ignore space issues
|
||||
if (err == LFS_ERR_NOSPC) {
|
||||
printf("btree: w%d 0x%x.%x\n",
|
||||
@@ -1129,7 +1129,7 @@ code = '''
|
||||
// update the tree
|
||||
for (lfs_size_t i = 0; i < N; i++) {
|
||||
int err = lfsr_btree_set(&lfs, &btree, i*W+W-1, LFSR_TAG_INLINED, W,
|
||||
LFSR_DATA(&uppers[i % 26], 1));
|
||||
LFSR_DATA_BUF(&uppers[i % 26], 1));
|
||||
// ignore space issues
|
||||
if (err == LFS_ERR_NOSPC) {
|
||||
printf("btree: w%d 0x%x.%x\n",
|
||||
@@ -1203,7 +1203,7 @@ code = '''
|
||||
lfsr_btree_t btree = LFSR_BTREE_NULL;
|
||||
for (lfs_size_t i = 0; i < N; i++) {
|
||||
int err = lfsr_btree_push(&lfs, &btree, i*W, LFSR_TAG_INLINED, W,
|
||||
LFSR_DATA(&alphas[i % 26], 1));
|
||||
LFSR_DATA_BUF(&alphas[i % 26], 1));
|
||||
// ignore space issues
|
||||
if (err == LFS_ERR_NOSPC) {
|
||||
printf("btree: w%d 0x%x.%x\n",
|
||||
@@ -1242,7 +1242,7 @@ code = '''
|
||||
// update btree
|
||||
int err = lfsr_btree_set(&lfs, &btree,
|
||||
weighted_bid+sim_weights[bid]-1, LFSR_TAG_INLINED, weight,
|
||||
LFSR_DATA(&uppers[i % 26], 1));
|
||||
LFSR_DATA_BUF(&uppers[i % 26], 1));
|
||||
// ignore space issues
|
||||
if (err == LFS_ERR_NOSPC) {
|
||||
break;
|
||||
@@ -1351,7 +1351,7 @@ code = '''
|
||||
// create a single-entry tree
|
||||
lfsr_btree_t btree = LFSR_BTREE_NULL;
|
||||
lfsr_btree_push(&lfs, &btree, 0, LFSR_TAG_INLINED, 1,
|
||||
LFSR_DATA("a", 1)) => 0;
|
||||
LFSR_DATA_BUF("a", 1)) => 0;
|
||||
// pop!
|
||||
lfsr_btree_pop(&lfs, &btree, 0) => 0;
|
||||
printf("btree: w%d 0x%x.%x\n",
|
||||
@@ -1370,7 +1370,7 @@ code = '''
|
||||
|
||||
// try to putting it back to see if things still work
|
||||
lfsr_btree_push(&lfs, &btree, 0, LFSR_TAG_INLINED, 1,
|
||||
LFSR_DATA("A", 1)) => 0;
|
||||
LFSR_DATA_BUF("A", 1)) => 0;
|
||||
printf("btree: w%d 0x%x.%x\n",
|
||||
btree.u.rbyd.weight,
|
||||
btree.u.rbyd.block,
|
||||
@@ -1404,9 +1404,9 @@ code = '''
|
||||
// create a single-entry tree
|
||||
lfsr_btree_t btree = LFSR_BTREE_NULL;
|
||||
lfsr_btree_push(&lfs, &btree, 0, LFSR_TAG_INLINED, 1,
|
||||
LFSR_DATA("a", 1)) => 0;
|
||||
LFSR_DATA_BUF("a", 1)) => 0;
|
||||
lfsr_btree_push(&lfs, &btree, 1, LFSR_TAG_INLINED, 1,
|
||||
LFSR_DATA("b", 1)) => 0;
|
||||
LFSR_DATA_BUF("b", 1)) => 0;
|
||||
// pop!
|
||||
lfsr_btree_pop(&lfs, &btree, 1) => 0;
|
||||
printf("btree: w%d 0x%x.%x\n",
|
||||
@@ -1431,7 +1431,7 @@ code = '''
|
||||
|
||||
// try to putting it back to see if things still work
|
||||
lfsr_btree_push(&lfs, &btree, 1, LFSR_TAG_INLINED, 1,
|
||||
LFSR_DATA("B", 1)) => 0;
|
||||
LFSR_DATA_BUF("B", 1)) => 0;
|
||||
printf("btree: w%d 0x%x.%x\n",
|
||||
btree.u.rbyd.weight,
|
||||
btree.u.rbyd.block,
|
||||
@@ -1471,9 +1471,9 @@ code = '''
|
||||
// create a single-entry tree
|
||||
lfsr_btree_t btree = LFSR_BTREE_NULL;
|
||||
lfsr_btree_push(&lfs, &btree, 0, LFSR_TAG_INLINED, 1,
|
||||
LFSR_DATA("a", 1)) => 0;
|
||||
LFSR_DATA_BUF("a", 1)) => 0;
|
||||
lfsr_btree_push(&lfs, &btree, 1, LFSR_TAG_INLINED, 1,
|
||||
LFSR_DATA("b", 1)) => 0;
|
||||
LFSR_DATA_BUF("b", 1)) => 0;
|
||||
// pop!
|
||||
lfsr_btree_pop(&lfs, &btree, 0) => 0;
|
||||
printf("btree: w%d 0x%x.%x\n",
|
||||
@@ -1498,7 +1498,7 @@ code = '''
|
||||
|
||||
// try to putting it back to see if things still work
|
||||
lfsr_btree_push(&lfs, &btree, 0, LFSR_TAG_INLINED, 1,
|
||||
LFSR_DATA("A", 1)) => 0;
|
||||
LFSR_DATA_BUF("A", 1)) => 0;
|
||||
printf("btree: w%d 0x%x.%x\n",
|
||||
btree.u.rbyd.weight,
|
||||
btree.u.rbyd.block,
|
||||
@@ -1538,11 +1538,11 @@ code = '''
|
||||
// create a single-entry tree
|
||||
lfsr_btree_t btree = LFSR_BTREE_NULL;
|
||||
lfsr_btree_push(&lfs, &btree, 0, LFSR_TAG_INLINED, 1,
|
||||
LFSR_DATA("a", 1)) => 0;
|
||||
LFSR_DATA_BUF("a", 1)) => 0;
|
||||
lfsr_btree_push(&lfs, &btree, 1, LFSR_TAG_INLINED, 1,
|
||||
LFSR_DATA("b", 1)) => 0;
|
||||
LFSR_DATA_BUF("b", 1)) => 0;
|
||||
lfsr_btree_push(&lfs, &btree, 2, LFSR_TAG_INLINED, 1,
|
||||
LFSR_DATA("c", 1)) => 0;
|
||||
LFSR_DATA_BUF("c", 1)) => 0;
|
||||
// pop!
|
||||
lfsr_btree_pop(&lfs, &btree, 2) => 0;
|
||||
printf("btree: w%d 0x%x.%x\n",
|
||||
@@ -1573,7 +1573,7 @@ code = '''
|
||||
|
||||
// try to putting it back to see if things still work
|
||||
lfsr_btree_push(&lfs, &btree, 2, LFSR_TAG_INLINED, 1,
|
||||
LFSR_DATA("C", 1)) => 0;
|
||||
LFSR_DATA_BUF("C", 1)) => 0;
|
||||
printf("btree: w%d 0x%x.%x\n",
|
||||
btree.u.rbyd.weight,
|
||||
btree.u.rbyd.block,
|
||||
@@ -1624,7 +1624,7 @@ code = '''
|
||||
const char *alphas = "abcdefghijklmnopqrstuvwxyz";
|
||||
for (lfs_size_t i = 0; i < N; i++) {
|
||||
int err = lfsr_btree_push(&lfs, &btree, i, LFSR_TAG_INLINED, 1,
|
||||
LFSR_DATA(&alphas[i % 26], 1));
|
||||
LFSR_DATA_BUF(&alphas[i % 26], 1));
|
||||
// ignore space issues
|
||||
if (err == LFS_ERR_NOSPC) {
|
||||
printf("btree: w%d 0x%x.%x\n",
|
||||
@@ -1674,7 +1674,7 @@ code = '''
|
||||
|
||||
// try recovering
|
||||
lfsr_btree_push(&lfs, &btree, REMAINING, LFSR_TAG_INLINED, 1,
|
||||
LFSR_DATA("R", 1)) => 0;
|
||||
LFSR_DATA_BUF("R", 1)) => 0;
|
||||
|
||||
for (lfs_size_t i = 0; i < REMAINING; i++) {
|
||||
lfsr_btree_get(&lfs, &btree, i,
|
||||
@@ -1715,7 +1715,7 @@ code = '''
|
||||
const char *alphas = "abcdefghijklmnopqrstuvwxyz";
|
||||
for (lfs_size_t i = 0; i < N; i++) {
|
||||
int err = lfsr_btree_push(&lfs, &btree, i, LFSR_TAG_INLINED, 1,
|
||||
LFSR_DATA(&alphas[i % 26], 1));
|
||||
LFSR_DATA_BUF(&alphas[i % 26], 1));
|
||||
// ignore space issues
|
||||
if (err == LFS_ERR_NOSPC) {
|
||||
printf("btree: w%d 0x%x.%x\n",
|
||||
@@ -1764,7 +1764,7 @@ code = '''
|
||||
|
||||
// try recovering
|
||||
lfsr_btree_push(&lfs, &btree, 0, LFSR_TAG_INLINED, 1,
|
||||
LFSR_DATA("R", 1)) => 0;
|
||||
LFSR_DATA_BUF("R", 1)) => 0;
|
||||
|
||||
lfsr_btree_get(&lfs, &btree, 0,
|
||||
&tag_, &weight_, buffer, 4) => 1;
|
||||
@@ -1807,7 +1807,7 @@ code = '''
|
||||
lfsr_btree_t btree = LFSR_BTREE_NULL;
|
||||
for (lfs_size_t i = 0; i < N; i++) {
|
||||
int err = lfsr_btree_push(&lfs, &btree, i, LFSR_TAG_INLINED, 1,
|
||||
LFSR_DATA(&alphas[i % 26], 1));
|
||||
LFSR_DATA_BUF(&alphas[i % 26], 1));
|
||||
// ignore space issues
|
||||
if (err == LFS_ERR_NOSPC) {
|
||||
printf("btree: w%d 0x%x.%x\n",
|
||||
@@ -1905,7 +1905,7 @@ code = '''
|
||||
const char *alphas = "abcdefghijklmnopqrstuvwxyz";
|
||||
for (lfs_size_t i = 0; i < N; i++) {
|
||||
int err = lfsr_btree_push(&lfs, &btree, i*W, LFSR_TAG_INLINED, W,
|
||||
LFSR_DATA(&alphas[i % 26], 1));
|
||||
LFSR_DATA_BUF(&alphas[i % 26], 1));
|
||||
// ignore space issues
|
||||
if (err == LFS_ERR_NOSPC) {
|
||||
printf("btree: w%d 0x%x.%x\n",
|
||||
@@ -1954,7 +1954,7 @@ code = '''
|
||||
|
||||
// try recovering
|
||||
lfsr_btree_push(&lfs, &btree, REMAINING*W, LFSR_TAG_INLINED, W,
|
||||
LFSR_DATA("R", 1)) => 0;
|
||||
LFSR_DATA_BUF("R", 1)) => 0;
|
||||
|
||||
for (lfs_size_t i = 0; i < REMAINING; i++) {
|
||||
lfsr_btree_get(&lfs, &btree, i*W+W-1,
|
||||
@@ -2045,7 +2045,7 @@ code = '''
|
||||
|
||||
int err = lfsr_btree_push(&lfs, &btree,
|
||||
weighted_bid, LFSR_TAG_INLINED, weight,
|
||||
LFSR_DATA(&alphas[i % 26], 1));
|
||||
LFSR_DATA_BUF(&alphas[i % 26], 1));
|
||||
// ignore space issues
|
||||
if (err == LFS_ERR_NOSPC) {
|
||||
printf("btree: w%d 0x%x.%x\n",
|
||||
@@ -2183,12 +2183,12 @@ code = '''
|
||||
lfsr_btree_t btree = LFSR_BTREE_NULL;
|
||||
const char *alphas = "abcdefghijklmnopqrstuvwxyz";
|
||||
lfsr_btree_push(&lfs, &btree, 0, LFSR_TAG_INLINED, 1,
|
||||
LFSR_DATA(&alphas[0 % 26], 1)) => 0;
|
||||
LFSR_DATA_BUF(&alphas[0 % 26], 1)) => 0;
|
||||
lfs_size_t n = 1;
|
||||
for (lfs_size_t i = 1; i < N; i++) {
|
||||
int err = lfsr_btree_split(&lfs, &btree, i-1, LFSR_DATA_NULL,
|
||||
LFSR_TAG_INLINED, 1, LFSR_DATA(&alphas[(i-1) % 26], 1),
|
||||
LFSR_TAG_INLINED, 1, LFSR_DATA(&alphas[(i-0) % 26], 1));
|
||||
LFSR_TAG_INLINED, 1, LFSR_DATA_BUF(&alphas[(i-1) % 26], 1),
|
||||
LFSR_TAG_INLINED, 1, LFSR_DATA_BUF(&alphas[(i-0) % 26], 1));
|
||||
// ignore space issues
|
||||
if (err == LFS_ERR_NOSPC) {
|
||||
break;
|
||||
@@ -2241,7 +2241,7 @@ code = '''
|
||||
// create a btree
|
||||
lfsr_btree_t btree = LFSR_BTREE_NULL;
|
||||
lfsr_btree_push(&lfs, &btree, 0, LFSR_TAG_INLINED, 1,
|
||||
LFSR_DATA("_", 1)) => 0;
|
||||
LFSR_DATA_BUF("_", 1)) => 0;
|
||||
|
||||
// set up a simulation to compare against
|
||||
//
|
||||
@@ -2259,8 +2259,8 @@ code = '''
|
||||
|
||||
// split btree
|
||||
int err = lfsr_btree_split(&lfs, &btree, bid, LFSR_DATA_NULL,
|
||||
LFSR_TAG_INLINED, 1, LFSR_DATA(&alphas[i % 26], 1),
|
||||
LFSR_TAG_INLINED, 1, LFSR_DATA(&uppers[i % 26], 1));
|
||||
LFSR_TAG_INLINED, 1, LFSR_DATA_BUF(&alphas[i % 26], 1),
|
||||
LFSR_TAG_INLINED, 1, LFSR_DATA_BUF(&uppers[i % 26], 1));
|
||||
// ignore space issues
|
||||
if (err == LFS_ERR_NOSPC) {
|
||||
break;
|
||||
@@ -2330,12 +2330,12 @@ code = '''
|
||||
lfsr_btree_t btree = LFSR_BTREE_NULL;
|
||||
const char *alphas = "abcdefghijklmnopqrstuvwxyz";
|
||||
lfsr_btree_push(&lfs, &btree, 0, LFSR_TAG_INLINED, W,
|
||||
LFSR_DATA(&alphas[0 % 26], 1)) => 0;
|
||||
LFSR_DATA_BUF(&alphas[0 % 26], 1)) => 0;
|
||||
lfs_size_t n = 1;
|
||||
for (lfs_size_t i = 1; i < N; i++) {
|
||||
int err = lfsr_btree_split(&lfs, &btree, (i-1)*W+W-1, LFSR_DATA_NULL,
|
||||
LFSR_TAG_INLINED, W, LFSR_DATA(&alphas[(i-1) % 26], 1),
|
||||
LFSR_TAG_INLINED, W, LFSR_DATA(&alphas[(i-0) % 26], 1));
|
||||
LFSR_TAG_INLINED, W, LFSR_DATA_BUF(&alphas[(i-1) % 26], 1),
|
||||
LFSR_TAG_INLINED, W, LFSR_DATA_BUF(&alphas[(i-0) % 26], 1));
|
||||
// ignore space issues
|
||||
if (err == LFS_ERR_NOSPC) {
|
||||
break;
|
||||
@@ -2389,7 +2389,7 @@ code = '''
|
||||
// create a btree
|
||||
lfsr_btree_t btree = LFSR_BTREE_NULL;
|
||||
lfsr_btree_push(&lfs, &btree, 0, LFSR_TAG_INLINED, W,
|
||||
LFSR_DATA("_", 1)) => 0;
|
||||
LFSR_DATA_BUF("_", 1)) => 0;
|
||||
|
||||
// set up a simulation to compare against
|
||||
//
|
||||
@@ -2421,9 +2421,9 @@ code = '''
|
||||
int err = lfsr_btree_split(&lfs, &btree,
|
||||
weighted_bid+sim_weights[bid]-1, LFSR_DATA_NULL,
|
||||
LFSR_TAG_INLINED, weight1,
|
||||
LFSR_DATA(&alphas[i % 26], 1),
|
||||
LFSR_DATA_BUF(&alphas[i % 26], 1),
|
||||
LFSR_TAG_INLINED, weight2,
|
||||
LFSR_DATA(&uppers[i % 26], 1));
|
||||
LFSR_DATA_BUF(&uppers[i % 26], 1));
|
||||
// ignore space issues
|
||||
if (err == LFS_ERR_NOSPC) {
|
||||
break;
|
||||
@@ -2566,19 +2566,19 @@ code = '''
|
||||
|
||||
// the extra push here avoids trying to inline the big entry
|
||||
lfsr_btree_push(&lfs, &btree, 0, LFSR_TAG_INLINED, 1,
|
||||
LFSR_DATA("_", 1)) => 0;
|
||||
LFSR_DATA_BUF("_", 1)) => 0;
|
||||
uint8_t buf1[SIZE];
|
||||
memset(buf1, 'a', SIZE);
|
||||
uint8_t buf2[SIZE];
|
||||
memset(buf2, 'b', SIZE);
|
||||
lfsr_btree_split(&lfs, &btree, 0, LFSR_DATA_NULL,
|
||||
LFSR_TAG_INLINED, 1, LFSR_DATA(buf1, SIZE),
|
||||
LFSR_TAG_INLINED, 1, LFSR_DATA(buf2, SIZE)) => 0;
|
||||
LFSR_TAG_INLINED, 1, LFSR_DATA_BUF(buf1, SIZE),
|
||||
LFSR_TAG_INLINED, 1, LFSR_DATA_BUF(buf2, SIZE)) => 0;
|
||||
// force compaction
|
||||
btree.u.rbyd.eoff = -1;
|
||||
memset(buf2, 'b', SIZE);
|
||||
lfsr_btree_set(&lfs, &btree, 1, LFSR_TAG_INLINED, 1,
|
||||
LFSR_DATA(buf2, SIZE)) => 0;
|
||||
LFSR_DATA_BUF(buf2, SIZE)) => 0;
|
||||
assert(lfsr_btree_weight(&btree) == 2);
|
||||
|
||||
// now remove one entry, since this brings the rbyd down to zero,
|
||||
@@ -2628,19 +2628,19 @@ code = '''
|
||||
|
||||
// the extra push here avoids trying to inline the big entry
|
||||
lfsr_btree_push(&lfs, &btree, 0, LFSR_TAG_INLINED, 1,
|
||||
LFSR_DATA("_", 1)) => 0;
|
||||
LFSR_DATA_BUF("_", 1)) => 0;
|
||||
uint8_t buf1[SIZE];
|
||||
memset(buf1, 'a', SIZE);
|
||||
uint8_t buf2[SIZE];
|
||||
memset(buf2, 'b', SIZE);
|
||||
lfsr_btree_split(&lfs, &btree, 0, LFSR_DATA_NULL,
|
||||
LFSR_TAG_INLINED, 1, LFSR_DATA(buf1, SIZE),
|
||||
LFSR_TAG_INLINED, 1, LFSR_DATA(buf2, SIZE)) => 0;
|
||||
LFSR_TAG_INLINED, 1, LFSR_DATA_BUF(buf1, SIZE),
|
||||
LFSR_TAG_INLINED, 1, LFSR_DATA_BUF(buf2, SIZE)) => 0;
|
||||
// force compaction
|
||||
btree.u.rbyd.eoff = -1;
|
||||
memset(buf2, 'b', SIZE);
|
||||
lfsr_btree_set(&lfs, &btree, 1, LFSR_TAG_INLINED, 1,
|
||||
LFSR_DATA(buf2, SIZE)) => 0;
|
||||
LFSR_DATA_BUF(buf2, SIZE)) => 0;
|
||||
assert(lfsr_btree_weight(&btree) == 2);
|
||||
|
||||
// now remove one entry, since this brings the rbyd down this zero,
|
||||
@@ -2693,14 +2693,14 @@ code = '''
|
||||
|
||||
// the extra push here avoids trying to inline the big entry
|
||||
lfsr_btree_push(&lfs, &btree, 0, LFSR_TAG_INLINED, 1,
|
||||
LFSR_DATA("_", 1)) => 0;
|
||||
LFSR_DATA_BUF("_", 1)) => 0;
|
||||
uint8_t buf1[SIZE];
|
||||
memset(buf1, 'a', SIZE);
|
||||
uint8_t buf2[SIZE];
|
||||
memset(buf2, 'b', SIZE);
|
||||
lfsr_btree_split(&lfs, &btree, 0, LFSR_DATA_NULL,
|
||||
LFSR_TAG_INLINED, 1, LFSR_DATA(buf1, SIZE),
|
||||
LFSR_TAG_INLINED, 1, LFSR_DATA(buf2, SIZE)) => 0;
|
||||
LFSR_TAG_INLINED, 1, LFSR_DATA_BUF(buf1, SIZE),
|
||||
LFSR_TAG_INLINED, 1, LFSR_DATA_BUF(buf2, SIZE)) => 0;
|
||||
|
||||
// force compaction, causing a split, but while we're splitting,
|
||||
// also remove an entry, bringing the split rbyd down to zero mid split
|
||||
@@ -2753,26 +2753,26 @@ code = '''
|
||||
|
||||
// the extra push here avoids trying to inline the big entry
|
||||
lfsr_btree_push(&lfs, &btree, 0, LFSR_TAG_INLINED, 1,
|
||||
LFSR_DATA("_", 1)) => 0;
|
||||
LFSR_DATA_BUF("_", 1)) => 0;
|
||||
uint8_t buf1[SIZE];
|
||||
memset(buf1, 'a', SIZE);
|
||||
uint8_t buf2[SIZE];
|
||||
memset(buf2, 'b', SIZE);
|
||||
lfsr_btree_split(&lfs, &btree, 0, LFSR_DATA_NULL,
|
||||
LFSR_TAG_INLINED, 1, LFSR_DATA(buf1, SIZE),
|
||||
LFSR_TAG_INLINED, 1, LFSR_DATA(buf2, SIZE)) => 0;
|
||||
LFSR_TAG_INLINED, 1, LFSR_DATA_BUF(buf1, SIZE),
|
||||
LFSR_TAG_INLINED, 1, LFSR_DATA_BUF(buf2, SIZE)) => 0;
|
||||
// force compaction
|
||||
btree.u.rbyd.eoff = -1;
|
||||
memset(buf2, 'b', SIZE);
|
||||
lfsr_btree_set(&lfs, &btree, 1, LFSR_TAG_INLINED, 1,
|
||||
LFSR_DATA(buf2, SIZE)) => 0;
|
||||
LFSR_DATA_BUF(buf2, SIZE)) => 0;
|
||||
assert(lfsr_btree_weight(&btree) == 2);
|
||||
|
||||
// now make both entries small so they should be merged if either compacts
|
||||
lfsr_btree_set(&lfs, &btree, 0, LFSR_TAG_INLINED, 1,
|
||||
LFSR_DATA("a", 1)) => 0;
|
||||
LFSR_DATA_BUF("a", 1)) => 0;
|
||||
lfsr_btree_set(&lfs, &btree, 1, LFSR_TAG_INLINED, 1,
|
||||
LFSR_DATA("b", 1)) => 0;
|
||||
LFSR_DATA_BUF("b", 1)) => 0;
|
||||
|
||||
// force compaction, while removing one entry, this drops the rbyd
|
||||
// down to zero while also triggering a merge
|
||||
@@ -2840,7 +2840,7 @@ code = '''
|
||||
// push to btree
|
||||
int err = lfsr_btree_push(&lfs, &btree, bid,
|
||||
LFSR_TAG_INLINED, 1,
|
||||
LFSR_DATA(&alphas[i % 26], 1));
|
||||
LFSR_DATA_BUF(&alphas[i % 26], 1));
|
||||
// ignore space issues
|
||||
if (err == LFS_ERR_NOSPC) {
|
||||
break;
|
||||
@@ -2856,7 +2856,7 @@ code = '''
|
||||
// update btree
|
||||
int err = lfsr_btree_set(&lfs, &btree, bid,
|
||||
LFSR_TAG_INLINED, 1,
|
||||
LFSR_DATA(&alphas[i % 26], 1));
|
||||
LFSR_DATA_BUF(&alphas[i % 26], 1));
|
||||
// ignore space issues
|
||||
if (err == LFS_ERR_NOSPC) {
|
||||
break;
|
||||
@@ -2967,7 +2967,7 @@ code = '''
|
||||
// push to btree
|
||||
int err = lfsr_btree_push(&lfs, &btree, weighted_bid,
|
||||
LFSR_TAG_INLINED, weight,
|
||||
LFSR_DATA(&alphas[i % 26], 1));
|
||||
LFSR_DATA_BUF(&alphas[i % 26], 1));
|
||||
// ignore space issues
|
||||
if (err == LFS_ERR_NOSPC) {
|
||||
break;
|
||||
@@ -2986,7 +2986,7 @@ code = '''
|
||||
// update btree
|
||||
int err = lfsr_btree_set(&lfs, &btree,
|
||||
weighted_bid+sim_weights[bid]-1, LFSR_TAG_INLINED, weight,
|
||||
LFSR_DATA(&alphas[i % 26], 1));
|
||||
LFSR_DATA_BUF(&alphas[i % 26], 1));
|
||||
// ignore space issues
|
||||
if (err == LFS_ERR_NOSPC) {
|
||||
break;
|
||||
@@ -3142,7 +3142,7 @@ code = '''
|
||||
// create a single-entry tree
|
||||
lfsr_btree_t btree = LFSR_BTREE_NULL;
|
||||
lfsr_btree_push(&lfs, &btree, 0, LFSR_TAG_INLINED, 1,
|
||||
LFSR_DATA("0", 1)) => 0;
|
||||
LFSR_DATA_BUF("0", 1)) => 0;
|
||||
printf("btree: w%d 0x%x.%x\n",
|
||||
btree.u.rbyd.weight,
|
||||
btree.u.rbyd.block,
|
||||
@@ -3191,10 +3191,11 @@ code = '''
|
||||
// create a two-entry tree
|
||||
lfsr_btree_t btree = LFSR_BTREE_NULL;
|
||||
lfsr_btree_push(&lfs, &btree, 0, LFSR_TAG_INLINED, 1,
|
||||
LFSR_DATA("0", 1)) => 0;
|
||||
lfsr_btree_split(&lfs, &btree, 0, LFSR_DATA_NAME(0, "aab", 3),
|
||||
LFSR_TAG_INLINED, 1, LFSR_DATA("0", 1),
|
||||
LFSR_TAG_INLINED, 1, LFSR_DATA("1", 1)) => 0;
|
||||
LFSR_DATA_BUF("0", 1)) => 0;
|
||||
lfsr_btree_split(&lfs, &btree, 0,
|
||||
LFSR_DATA_CAT(LFSR_DATA_LEB128(0), LFSR_DATA_BUF("aab", 3)),
|
||||
LFSR_TAG_INLINED, 1, LFSR_DATA_BUF("0", 1),
|
||||
LFSR_TAG_INLINED, 1, LFSR_DATA_BUF("1", 1)) => 0;
|
||||
printf("btree: w%d 0x%x.%x\n",
|
||||
btree.u.rbyd.weight,
|
||||
btree.u.rbyd.block,
|
||||
@@ -3251,13 +3252,15 @@ code = '''
|
||||
// create a two-entry tree
|
||||
lfsr_btree_t btree = LFSR_BTREE_NULL;
|
||||
lfsr_btree_push(&lfs, &btree, 0, LFSR_TAG_INLINED, 1,
|
||||
LFSR_DATA("0", 1)) => 0;
|
||||
lfsr_btree_split(&lfs, &btree, 0, LFSR_DATA_NAME(1*DID, "aab", 3),
|
||||
LFSR_TAG_INLINED, 1, LFSR_DATA("0", 1),
|
||||
LFSR_TAG_INLINED, 1, LFSR_DATA("1", 1)) => 0;
|
||||
lfsr_btree_split(&lfs, &btree, 1, LFSR_DATA_NAME(2*DID, "aac", 3),
|
||||
LFSR_TAG_INLINED, 1, LFSR_DATA("1", 1),
|
||||
LFSR_TAG_INLINED, 1, LFSR_DATA("2", 1)) => 0;
|
||||
LFSR_DATA_BUF("0", 1)) => 0;
|
||||
lfsr_btree_split(&lfs, &btree, 0,
|
||||
LFSR_DATA_CAT(LFSR_DATA_LEB128(1*DID), LFSR_DATA_BUF("aab", 3)),
|
||||
LFSR_TAG_INLINED, 1, LFSR_DATA_BUF("0", 1),
|
||||
LFSR_TAG_INLINED, 1, LFSR_DATA_BUF("1", 1)) => 0;
|
||||
lfsr_btree_split(&lfs, &btree, 1,
|
||||
LFSR_DATA_CAT(LFSR_DATA_LEB128(2*DID), LFSR_DATA_BUF("aac", 3)),
|
||||
LFSR_TAG_INLINED, 1, LFSR_DATA_BUF("1", 1),
|
||||
LFSR_TAG_INLINED, 1, LFSR_DATA_BUF("2", 1)) => 0;
|
||||
printf("btree: w%d 0x%x.%x\n",
|
||||
btree.u.rbyd.weight,
|
||||
btree.u.rbyd.block,
|
||||
@@ -3322,13 +3325,15 @@ code = '''
|
||||
// create a two-entry tree
|
||||
lfsr_btree_t btree = LFSR_BTREE_NULL;
|
||||
lfsr_btree_push(&lfs, &btree, 0, LFSR_TAG_INLINED, 1,
|
||||
LFSR_DATA("0", 1)) => 0;
|
||||
lfsr_btree_split(&lfs, &btree, 0, LFSR_DATA_NAME(2*DID, "aac", 3),
|
||||
LFSR_TAG_INLINED, 1, LFSR_DATA("1", 1),
|
||||
LFSR_TAG_INLINED, 1, LFSR_DATA("2", 1)) => 0;
|
||||
lfsr_btree_split(&lfs, &btree, 0, LFSR_DATA_NAME(1*DID, "aab", 3),
|
||||
LFSR_TAG_INLINED, 1, LFSR_DATA("0", 1),
|
||||
LFSR_TAG_INLINED, 1, LFSR_DATA("1", 1)) => 0;
|
||||
LFSR_DATA_BUF("0", 1)) => 0;
|
||||
lfsr_btree_split(&lfs, &btree, 0,
|
||||
LFSR_DATA_CAT(LFSR_DATA_LEB128(2*DID), LFSR_DATA_BUF("aac", 3)),
|
||||
LFSR_TAG_INLINED, 1, LFSR_DATA_BUF("1", 1),
|
||||
LFSR_TAG_INLINED, 1, LFSR_DATA_BUF("2", 1)) => 0;
|
||||
lfsr_btree_split(&lfs, &btree, 0,
|
||||
LFSR_DATA_CAT(LFSR_DATA_LEB128(1*DID), LFSR_DATA_BUF("aab", 3)),
|
||||
LFSR_TAG_INLINED, 1, LFSR_DATA_BUF("0", 1),
|
||||
LFSR_TAG_INLINED, 1, LFSR_DATA_BUF("1", 1)) => 0;
|
||||
printf("btree: w%d 0x%x.%x\n",
|
||||
btree.u.rbyd.weight,
|
||||
btree.u.rbyd.block,
|
||||
@@ -3396,16 +3401,16 @@ code = '''
|
||||
const char *alphas = "abcdefghijklmnopqrstuvwxyz";
|
||||
const char *nums = "0123456789";
|
||||
lfsr_btree_push(&lfs, &btree, 0, LFSR_TAG_INLINED, 1,
|
||||
LFSR_DATA(&nums[0 % 10], 1)) => 0;
|
||||
LFSR_DATA_BUF(&nums[0 % 10], 1)) => 0;
|
||||
lfs_size_t n = 1;
|
||||
for (lfs_size_t i = 1; i < N; i++) {
|
||||
char name[3] = {
|
||||
alphas[(i/26/26) % 26], alphas[(i/26) % 26], alphas[i % 26]
|
||||
};
|
||||
int err = lfsr_btree_split(&lfs, &btree, i-1,
|
||||
LFSR_DATA_NAME(i*DID, name, 3),
|
||||
LFSR_TAG_INLINED, 1, LFSR_DATA(&nums[(i-1) % 10], 1),
|
||||
LFSR_TAG_INLINED, 1, LFSR_DATA(&nums[(i-0) % 10], 1));
|
||||
LFSR_DATA_CAT(LFSR_DATA_LEB128(i*DID), LFSR_DATA_BUF(name, 3)),
|
||||
LFSR_TAG_INLINED, 1, LFSR_DATA_BUF(&nums[(i-1) % 10], 1),
|
||||
LFSR_TAG_INLINED, 1, LFSR_DATA_BUF(&nums[(i-0) % 10], 1));
|
||||
// ignore space issues
|
||||
if (err == LFS_ERR_NOSPC) {
|
||||
break;
|
||||
@@ -3462,7 +3467,7 @@ code = '''
|
||||
// create a btree
|
||||
lfsr_btree_t btree = LFSR_BTREE_NULL;
|
||||
lfsr_btree_push(&lfs, &btree, 0, LFSR_TAG_INLINED, 1,
|
||||
LFSR_DATA("_", 1)) => 0;
|
||||
LFSR_DATA_BUF("_", 1)) => 0;
|
||||
|
||||
// set up a simulation to compare against
|
||||
//
|
||||
@@ -3496,9 +3501,9 @@ code = '''
|
||||
|
||||
// split btree
|
||||
int err = lfsr_btree_split(&lfs, &btree, bid,
|
||||
LFSR_DATA_NAME(0, name, 3),
|
||||
LFSR_TAG_INLINED, 1, LFSR_DATA(&nums[i % 10], 1),
|
||||
LFSR_TAG_INLINED, 1, LFSR_DATA(&nums[i % 10], 1));
|
||||
LFSR_DATA_CAT(LFSR_DATA_LEB128(0), LFSR_DATA_BUF(name, 3)),
|
||||
LFSR_TAG_INLINED, 1, LFSR_DATA_BUF(&nums[i % 10], 1),
|
||||
LFSR_TAG_INLINED, 1, LFSR_DATA_BUF(&nums[i % 10], 1));
|
||||
// ignore space issues
|
||||
if (err == LFS_ERR_NOSPC) {
|
||||
break;
|
||||
@@ -3574,16 +3579,16 @@ code = '''
|
||||
const char *alphas = "abcdefghijklmnopqrstuvwxyz";
|
||||
const char *nums = "0123456789";
|
||||
lfsr_btree_push(&lfs, &btree, 0, LFSR_TAG_INLINED, W,
|
||||
LFSR_DATA(&nums[0 % 10], 1)) => 0;
|
||||
LFSR_DATA_BUF(&nums[0 % 10], 1)) => 0;
|
||||
lfs_size_t n = 1;
|
||||
for (lfs_size_t i = 1; i < N; i++) {
|
||||
char name[3] = {
|
||||
alphas[(i/26/26) % 26], alphas[(i/26) % 26], alphas[i % 26]
|
||||
};
|
||||
int err = lfsr_btree_split(&lfs, &btree,
|
||||
(i-1)*W+W-1, LFSR_DATA_NAME(i*DID, name, 3),
|
||||
LFSR_TAG_INLINED, W, LFSR_DATA(&nums[(i-1) % 10], 1),
|
||||
LFSR_TAG_INLINED, W, LFSR_DATA(&nums[(i-0) % 10], 1));
|
||||
int err = lfsr_btree_split(&lfs, &btree, (i-1)*W+W-1,
|
||||
LFSR_DATA_CAT(LFSR_DATA_LEB128(i*DID), LFSR_DATA_BUF(name, 3)),
|
||||
LFSR_TAG_INLINED, W, LFSR_DATA_BUF(&nums[(i-1) % 10], 1),
|
||||
LFSR_TAG_INLINED, W, LFSR_DATA_BUF(&nums[(i-0) % 10], 1));
|
||||
// ignore space issues
|
||||
if (err == LFS_ERR_NOSPC) {
|
||||
break;
|
||||
@@ -3641,7 +3646,7 @@ code = '''
|
||||
// create a btree
|
||||
lfsr_btree_t btree = LFSR_BTREE_NULL;
|
||||
lfsr_btree_push(&lfs, &btree, 0, LFSR_TAG_INLINED, W,
|
||||
LFSR_DATA("_", 1)) => 0;
|
||||
LFSR_DATA_BUF("_", 1)) => 0;
|
||||
|
||||
// set up a simulation to compare against
|
||||
//
|
||||
@@ -3688,9 +3693,9 @@ code = '''
|
||||
// split btree
|
||||
int err = lfsr_btree_split(&lfs, &btree,
|
||||
weighted_bid+sim_weights[bid]-1,
|
||||
LFSR_DATA_NAME(0, name, 3),
|
||||
LFSR_TAG_INLINED, weight1, LFSR_DATA(&nums[i % 10], 1),
|
||||
LFSR_TAG_INLINED, weight2, LFSR_DATA(&nums[i % 10], 1));
|
||||
LFSR_DATA_CAT(LFSR_DATA_LEB128(0), LFSR_DATA_BUF(name, 3)),
|
||||
LFSR_TAG_INLINED, weight1, LFSR_DATA_BUF(&nums[i % 10], 1),
|
||||
LFSR_TAG_INLINED, weight2, LFSR_DATA_BUF(&nums[i % 10], 1));
|
||||
// ignore space issues
|
||||
if (err == LFS_ERR_NOSPC) {
|
||||
break;
|
||||
@@ -3792,7 +3797,7 @@ code = '''
|
||||
// create a btree
|
||||
lfsr_btree_t btree = LFSR_BTREE_NULL;
|
||||
lfsr_btree_push(&lfs, &btree, 0, LFSR_TAG_INLINED, 1,
|
||||
LFSR_DATA("_", 1)) => 0;
|
||||
LFSR_DATA_BUF("_", 1)) => 0;
|
||||
|
||||
// set up a simulation to compare against
|
||||
//
|
||||
@@ -3841,11 +3846,11 @@ code = '''
|
||||
if (split_bid > bid) {
|
||||
int err = lfsr_btree_split(&lfs, &btree,
|
||||
split_bid,
|
||||
LFSR_DATA_NAME(0, sim_names[bid+1], 3),
|
||||
LFSR_TAG_INLINED, 1,
|
||||
LFSR_DATA(&nums[i % 10], 1),
|
||||
LFSR_TAG_INLINED, 1,
|
||||
LFSR_DATA(split_buf, 1));
|
||||
LFSR_DATA_CAT(
|
||||
LFSR_DATA_LEB128(0),
|
||||
LFSR_DATA_BUF(sim_names[bid+1], 3)),
|
||||
LFSR_TAG_INLINED, 1, LFSR_DATA_BUF(&nums[i % 10], 1),
|
||||
LFSR_TAG_INLINED, 1, LFSR_DATA_BUF(split_buf, 1));
|
||||
// ignore space issues
|
||||
if (err == LFS_ERR_NOSPC) {
|
||||
break;
|
||||
@@ -3853,11 +3858,11 @@ code = '''
|
||||
assert(err == 0);
|
||||
} else {
|
||||
int err = lfsr_btree_split(&lfs, &btree,
|
||||
split_bid, LFSR_DATA_NAME(0, name, 3),
|
||||
LFSR_TAG_INLINED, 1,
|
||||
LFSR_DATA(split_buf, 1),
|
||||
LFSR_TAG_INLINED, 1,
|
||||
LFSR_DATA(&nums[i % 10], 1));
|
||||
split_bid, LFSR_DATA_CAT(
|
||||
LFSR_DATA_LEB128(0),
|
||||
LFSR_DATA_BUF(name, 3)),
|
||||
LFSR_TAG_INLINED, 1, LFSR_DATA_BUF(split_buf, 1),
|
||||
LFSR_TAG_INLINED, 1, LFSR_DATA_BUF(&nums[i % 10], 1));
|
||||
// ignore space issues
|
||||
if (err == LFS_ERR_NOSPC) {
|
||||
break;
|
||||
@@ -3876,7 +3881,7 @@ code = '''
|
||||
// update btree
|
||||
int err = lfsr_btree_set(&lfs, &btree, bid,
|
||||
LFSR_TAG_INLINED, 1,
|
||||
LFSR_DATA(&nums[i % 10], 1));
|
||||
LFSR_DATA_BUF(&nums[i % 10], 1));
|
||||
// ignore space issues
|
||||
if (err == LFS_ERR_NOSPC) {
|
||||
break;
|
||||
@@ -3967,7 +3972,7 @@ code = '''
|
||||
// create a btree
|
||||
lfsr_btree_t btree = LFSR_BTREE_NULL;
|
||||
lfsr_btree_push(&lfs, &btree, 0, LFSR_TAG_INLINED, W,
|
||||
LFSR_DATA("_", 1)) => 0;
|
||||
LFSR_DATA_BUF("_", 1)) => 0;
|
||||
|
||||
// set up a simulation to compare against
|
||||
//
|
||||
@@ -4033,24 +4038,28 @@ code = '''
|
||||
uint8_t split_buf[4];
|
||||
lfsr_data_read(&lfs, &split_data, split_buf, 4) => 1;
|
||||
if (split_bid > weighted_bid+sim_weights[bid]-1) {
|
||||
int err = lfsr_btree_split(&lfs, &btree,
|
||||
split_bid, LFSR_DATA_NAME(0, sim_names[bid+1], 3),
|
||||
int err = lfsr_btree_split(&lfs, &btree, split_bid,
|
||||
LFSR_DATA_CAT(
|
||||
LFSR_DATA_LEB128(0),
|
||||
LFSR_DATA_BUF(sim_names[bid+1], 3)),
|
||||
LFSR_TAG_INLINED, weight,
|
||||
LFSR_DATA(&nums[i % 10], 1),
|
||||
LFSR_DATA_BUF(&nums[i % 10], 1),
|
||||
LFSR_TAG_INLINED, split_weight,
|
||||
LFSR_DATA(split_buf, 1));
|
||||
LFSR_DATA_BUF(split_buf, 1));
|
||||
// ignore space issues
|
||||
if (err == LFS_ERR_NOSPC) {
|
||||
break;
|
||||
}
|
||||
assert(err == 0);
|
||||
} else {
|
||||
int err = lfsr_btree_split(&lfs, &btree,
|
||||
split_bid, LFSR_DATA_NAME(0, name, 3),
|
||||
int err = lfsr_btree_split(&lfs, &btree, split_bid,
|
||||
LFSR_DATA_CAT(
|
||||
LFSR_DATA_LEB128(0),
|
||||
LFSR_DATA_BUF(name, 3)),
|
||||
LFSR_TAG_INLINED, split_weight,
|
||||
LFSR_DATA(split_buf, 1),
|
||||
LFSR_DATA_BUF(split_buf, 1),
|
||||
LFSR_TAG_INLINED, weight,
|
||||
LFSR_DATA(&nums[i % 10], 1));
|
||||
LFSR_DATA_BUF(&nums[i % 10], 1));
|
||||
// ignore space issues
|
||||
if (err == LFS_ERR_NOSPC) {
|
||||
break;
|
||||
@@ -4072,7 +4081,7 @@ code = '''
|
||||
// update btree
|
||||
int err = lfsr_btree_set(&lfs, &btree,
|
||||
weighted_bid+sim_weights[bid]-1, LFSR_TAG_INLINED, weight,
|
||||
LFSR_DATA(&nums[i % 10], 1));
|
||||
LFSR_DATA_BUF(&nums[i % 10], 1));
|
||||
// ignore space issues
|
||||
if (err == LFS_ERR_NOSPC) {
|
||||
break;
|
||||
@@ -4191,7 +4200,7 @@ code = '''
|
||||
lfs_size_t n = 0;
|
||||
for (lfs_size_t i = 0; i < N; i++) {
|
||||
int err = lfsr_btree_push(&lfs, &btree, i, LFSR_TAG_INLINED, 1,
|
||||
LFSR_DATA(&alphas[i % 26], 1));
|
||||
LFSR_DATA_BUF(&alphas[i % 26], 1));
|
||||
// ignore space issues
|
||||
if (err == LFS_ERR_NOSPC) {
|
||||
break;
|
||||
@@ -4244,7 +4253,7 @@ code = '''
|
||||
}
|
||||
|
||||
if (tag_ == LFSR_TAG_BTREE) {
|
||||
lfsr_rbyd_t *branch = (lfsr_rbyd_t *)data_.u.buffer.buffer;
|
||||
lfsr_rbyd_t *branch = (lfsr_rbyd_t *)data_.u.direct.buffer;
|
||||
printf("traversal: %d 0x%x w%d btree 0x%x.%x\n",
|
||||
bid_,
|
||||
tag_,
|
||||
@@ -4324,7 +4333,7 @@ code = '''
|
||||
|
||||
// add to btree
|
||||
int err = lfsr_btree_push(&lfs, &btree, bid, LFSR_TAG_INLINED, 1,
|
||||
LFSR_DATA(&alphas[i % 26], 1));
|
||||
LFSR_DATA_BUF(&alphas[i % 26], 1));
|
||||
// ignore space issues
|
||||
if (err == LFS_ERR_NOSPC) {
|
||||
break;
|
||||
@@ -4392,7 +4401,7 @@ code = '''
|
||||
}
|
||||
|
||||
if (tag_ == LFSR_TAG_BTREE) {
|
||||
lfsr_rbyd_t *branch = (lfsr_rbyd_t *)data_.u.buffer.buffer;
|
||||
lfsr_rbyd_t *branch = (lfsr_rbyd_t *)data_.u.direct.buffer;
|
||||
printf("traversal: %d 0x%x w%d btree 0x%x.%x\n",
|
||||
bid_,
|
||||
tag_,
|
||||
|
||||
Reference in New Issue
Block a user