diff --git a/lfs.c b/lfs.c index 42e63fb8..fb3690a1 100644 --- a/lfs.c +++ b/lfs.c @@ -4020,8 +4020,7 @@ static int lfsr_btree_commit(lfs_t *lfs, } static int lfsr_btree_push(lfs_t *lfs, lfsr_btree_t *btree, - lfs_size_t bid, lfsr_tag_t tag, lfs_size_t weight, - const void *buffer, lfs_size_t size) { + lfs_size_t bid, lfsr_tag_t tag, lfs_size_t weight, lfsr_data_t data) { LFS_ASSERT(bid <= lfsr_btree_weight(btree)); // null btree? @@ -4031,9 +4030,13 @@ static int lfsr_btree_push(lfs_t *lfs, lfsr_btree_t *btree, btree->weight = lfsr_btree_setinlined(weight); btree->inlined.tag = tag; - LFS_ASSERT(size <= LFSR_BTREE_INLINESIZE); - memcpy(btree->inlined.buffer, buffer, size); - btree->inlined.size = size; + lfs_ssize_t d = lfsr_data_read(lfs, data, 0, + btree->inlined.buffer, LFSR_BTREE_INLINESIZE); + if (d < 0) { + return d; + } + LFS_ASSERT(d <= LFSR_BTREE_INLINESIZE); + btree->inlined.size = d; return 0; // inlined btree, need to expand into an rbyd @@ -4050,9 +4053,8 @@ static int lfsr_btree_push(lfs_t *lfs, lfsr_btree_t *btree, 0, lfsr_tag_setmk(btree->inlined.tag), +lfsr_btree_weight(btree), btree->inlined.buffer, btree->inlined.size), - LFSR_ATTR_( - bid, lfsr_tag_setmk(tag), +weight, - buffer, size))); + LFSR_ATTR_DATA_( + bid, lfsr_tag_setmk(tag), +weight, data))); if (err) { return err; } @@ -4093,8 +4095,7 @@ static int lfsr_btree_push(lfs_t *lfs, lfsr_btree_t *btree, // of the rest int degenerate = lfsr_btree_commit(lfs, btree, bid_, 0, &rbyd, LFSR_BTREE_ATTRS( - LFSR_ATTR_(rid, lfsr_tag_setmk(tag), +weight, - buffer, size))); + LFSR_ATTR_DATA_(rid, lfsr_tag_setmk(tag), +weight, data))); if (degenerate < 0) { return degenerate; } @@ -4104,9 +4105,13 @@ static int lfsr_btree_push(lfs_t *lfs, lfsr_btree_t *btree, btree->weight = lfsr_btree_setinlined(weight); btree->inlined.tag = tag; - LFS_ASSERT(size <= LFSR_BTREE_INLINESIZE); - memcpy(btree->inlined.buffer, buffer, size); - btree->inlined.size = size; + lfs_ssize_t d = lfsr_data_read(lfs, data, 0, + btree->inlined.buffer, LFSR_BTREE_INLINESIZE); + if (d < 0) { + return d; + } + LFS_ASSERT(d <= LFSR_BTREE_INLINESIZE); + btree->inlined.size = d; } return 0; @@ -4114,8 +4119,7 @@ static int lfsr_btree_push(lfs_t *lfs, lfsr_btree_t *btree, } static int lfsr_btree_update(lfs_t *lfs, lfsr_btree_t *btree, - lfs_size_t bid, lfsr_tag_t tag, lfs_size_t weight, - const void *buffer, lfs_size_t size) { + lfs_size_t bid, lfsr_tag_t tag, lfs_size_t weight, lfsr_data_t data) { LFS_ASSERT(bid < lfsr_btree_weight(btree)); LFS_ASSERT(lfsr_btree_weight(btree) > 0); @@ -4126,9 +4130,13 @@ static int lfsr_btree_update(lfs_t *lfs, lfsr_btree_t *btree, btree->weight = lfsr_btree_setinlined(weight); btree->inlined.tag = tag; - LFS_ASSERT(size <= LFSR_BTREE_INLINESIZE); - memcpy(btree->inlined.buffer, buffer, size); - btree->inlined.size = size; + lfs_ssize_t d = lfsr_data_read(lfs, data, 0, + btree->inlined.buffer, LFSR_BTREE_INLINESIZE); + if (d < 0) { + return d; + } + LFS_ASSERT(d <= LFSR_BTREE_INLINESIZE); + btree->inlined.size = d; return 0; // a normal btree @@ -4152,7 +4160,7 @@ static int lfsr_btree_update(lfs_t *lfs, lfsr_btree_t *btree, (tag != rtag ? LFSR_ATTR_(rid, lfsr_tag_setrm(rtag), 0, NULL, 0) : LFSR_ATTR_NOOP), - LFSR_ATTR_(rid, tag, 0, buffer, size), + LFSR_ATTR_DATA_(rid, tag, 0, data), LFSR_ATTR(rid, UNR, +weight-rweight, NULL, 0))); if (degenerate < 0) { return degenerate; @@ -4163,9 +4171,13 @@ static int lfsr_btree_update(lfs_t *lfs, lfsr_btree_t *btree, btree->weight = lfsr_btree_setinlined(weight); btree->inlined.tag = tag; - LFS_ASSERT(size <= LFSR_BTREE_INLINESIZE); - memcpy(btree->inlined.buffer, buffer, size); - btree->inlined.size = size; + lfs_ssize_t d = lfsr_data_read(lfs, data, 0, + btree->inlined.buffer, LFSR_BTREE_INLINESIZE); + if (d < 0) { + return d; + } + LFS_ASSERT(d <= LFSR_BTREE_INLINESIZE); + btree->inlined.size = d; } return 0; @@ -4268,10 +4280,8 @@ static int lfsr_btree_pop(lfs_t *lfs, lfsr_btree_t *btree, lfs_size_t bid) { // static int lfsr_btree_split(lfs_t *lfs, lfsr_btree_t *btree, lfs_size_t bid, lfsr_data_t name, - lfsr_tag_t tag1, lfs_size_t weight1, - const void *buffer1, lfs_size_t size1, - lfsr_tag_t tag2, lfs_size_t weight2, - const void *buffer2, lfs_size_t size2) { + lfsr_tag_t tag1, lfs_size_t weight1, lfsr_data_t data1, + lfsr_tag_t tag2, lfs_size_t weight2, lfsr_data_t data2) { LFS_ASSERT(bid < lfsr_btree_weight(btree)); LFS_ASSERT(lfsr_btree_weight(btree) > 0); @@ -4285,17 +4295,15 @@ static int lfsr_btree_split(lfs_t *lfs, lfsr_btree_t *btree, // commit our entries err = lfsr_rbyd_commit(lfs, &rbyd, LFSR_ATTRS( - LFSR_ATTR_(0, lfsr_tag_setmk(tag1), +weight1, - buffer1, size1), + LFSR_ATTR_DATA_(0, lfsr_tag_setmk(tag1), +weight1, data1), (lfsr_data_size(name) > 0 - ? LFSR_ATTR_DATA(weight1, MKBRANCH, +weight2, - name) + ? LFSR_ATTR_DATA(weight1, MKBRANCH, +weight2, name) : LFSR_ATTR_NOOP), (lfsr_data_size(name) > 0 - ? LFSR_ATTR_(weight1+weight2-1, tag2, 0, - buffer2, size2) - : LFSR_ATTR_(weight1, lfsr_tag_setmk(tag2), +weight2, - buffer2, size2)))); + ? LFSR_ATTR_DATA_(weight1+weight2-1, + tag2, 0, data2) + : LFSR_ATTR_DATA_(weight1, + lfsr_tag_setmk(tag2), +weight2, data2)))); if (err) { return err; } @@ -4321,19 +4329,17 @@ static int lfsr_btree_split(lfs_t *lfs, lfsr_btree_t *btree, int degenerate = lfsr_btree_commit(lfs, btree, bid, -1, &rbyd, LFSR_BTREE_ATTRS( LFSR_ATTR(rid, UNR, +weight1-rweight, NULL, 0), - LFSR_ATTR_(rid-(rweight-1)+weight1-1, tag1, 0, - buffer1, size1), + LFSR_ATTR_DATA_(rid-(rweight-1)+weight1-1, tag1, 0, data1), (lfsr_data_size(name) > 0 ? LFSR_ATTR_DATA( rid-(rweight-1)+weight1, MKBRANCH, +weight2, name) : LFSR_ATTR_NOOP), (lfsr_data_size(name) > 0 - ? LFSR_ATTR_(rid-(rweight-1)+weight1+weight2-1, tag2, 0, - buffer2, size2) - : LFSR_ATTR_(rid-(rweight-1)+weight1, - lfsr_tag_setmk(tag2), +weight2, - buffer2, size2)))); + ? LFSR_ATTR_DATA_(rid-(rweight-1)+weight1+weight2-1, + tag2, 0, data2) + : LFSR_ATTR_DATA_(rid-(rweight-1)+weight1, + lfsr_tag_setmk(tag2), +weight2, data2)))); if (degenerate < 0) { return degenerate; } @@ -4812,7 +4818,7 @@ static int lfsr_mdir_commit(lfs_t *lfs, lfsr_mdir_t *mdir, lfs_ssize_t *rid, } err = lfsr_btree_push(lfs, &lfs->mtree, 0, LFSR_TAG_MDIR, 1, - buf, d); + LFSR_DATA_BUF(buf, d)); if (err) { return err; } @@ -5009,7 +5015,7 @@ static int lfsr_mdir_commit(lfs_t *lfs, lfsr_mdir_t *mdir, lfs_ssize_t *rid, // TODO do we really need an explicit push when creating a new, // 2-sized btree? err = lfsr_btree_push(lfs, &lfs->mtree, 0, LFSR_TAG_MDIR, 1, - NULL, 0); + LFSR_DATA_NULL); if (err) { return err; } @@ -5032,8 +5038,8 @@ static int lfsr_mdir_commit(lfs_t *lfs, lfsr_mdir_t *mdir, lfs_ssize_t *rid, (lfsr_tag_suptype(stag) == LFSR_TAG_NAME ? sdata : LFSR_DATA_NULL), - LFSR_TAG_MDIR, 1, buf1, d1, - LFSR_TAG_MDIR, 1, buf2, d2); + LFSR_TAG_MDIR, 1, LFSR_DATA_BUF(buf1, d1), + LFSR_TAG_MDIR, 1, LFSR_DATA_BUF(buf2, d2)); if (err) { return err; } diff --git a/tests/test_btree.toml b/tests/test_btree.toml index 6c1b90d5..bb075185 100644 --- a/tests/test_btree.toml +++ b/tests/test_btree.toml @@ -22,9 +22,9 @@ code = ''' // create an empty tree lfsr_btree_t btree = LFSR_BTREE_NULL; printf("btree: w%d 0x%x.%x\n", - btree.weight, - btree.root.block, - btree.root.trunk); + btree.weight, + btree.root.block, + btree.root.trunk); assert(lfsr_btree_weight(&btree) == 0); // try looking up tags @@ -54,11 +54,12 @@ code = ''' // create a single-entry tree lfsr_btree_t btree = LFSR_BTREE_NULL; - lfsr_btree_push(&lfs, &btree, 0, LFSR_TAG_INLINED, 1, "a", 1) => 0; + lfsr_btree_push(&lfs, &btree, 0, LFSR_TAG_INLINED, 1, + LFSR_DATA_BUF("a", 1)) => 0; printf("btree: w%d 0x%x.%x\n", - btree.weight, - btree.root.block, - btree.root.trunk); + btree.weight, + btree.root.block, + btree.root.trunk); assert(lfsr_btree_weight(&btree) == 1); // try looking up tags @@ -95,12 +96,14 @@ code = ''' // create a two-entry tree lfsr_btree_t btree = LFSR_BTREE_NULL; - lfsr_btree_push(&lfs, &btree, 0, LFSR_TAG_INLINED, 1, "a", 1) => 0; - lfsr_btree_push(&lfs, &btree, 1, LFSR_TAG_INLINED, 1, "b", 1) => 0; + lfsr_btree_push(&lfs, &btree, 0, LFSR_TAG_INLINED, 1, + LFSR_DATA_BUF("a", 1)) => 0; + lfsr_btree_push(&lfs, &btree, 1, LFSR_TAG_INLINED, 1, + LFSR_DATA_BUF("b", 1)) => 0; printf("btree: w%d 0x%x.%x\n", - btree.weight, - btree.root.block, - btree.root.trunk); + btree.weight, + btree.root.block, + btree.root.trunk); assert(lfsr_btree_weight(&btree) == 2); // try looking up tags @@ -143,12 +146,14 @@ code = ''' // create a two-entry tree lfsr_btree_t btree = LFSR_BTREE_NULL; - lfsr_btree_push(&lfs, &btree, 0, LFSR_TAG_INLINED, 1, "b", 1) => 0; - lfsr_btree_push(&lfs, &btree, 0, LFSR_TAG_INLINED, 1, "a", 1) => 0; + lfsr_btree_push(&lfs, &btree, 0, LFSR_TAG_INLINED, 1, + LFSR_DATA_BUF("b", 1)) => 0; + lfsr_btree_push(&lfs, &btree, 0, LFSR_TAG_INLINED, 1, + LFSR_DATA_BUF("a", 1)) => 0; printf("btree: w%d 0x%x.%x\n", - btree.weight, - btree.root.block, - btree.root.trunk); + btree.weight, + btree.root.block, + btree.root.trunk); assert(lfsr_btree_weight(&btree) == 2); // try looking up tags @@ -192,13 +197,16 @@ code = ''' // create a two-entry tree lfsr_btree_t btree = LFSR_BTREE_NULL; - lfsr_btree_push(&lfs, &btree, 0, LFSR_TAG_INLINED, 1, "a", 1) => 0; - lfsr_btree_push(&lfs, &btree, 1, LFSR_TAG_INLINED, 1, "b", 1) => 0; - lfsr_btree_push(&lfs, &btree, 2, LFSR_TAG_INLINED, 1, "c", 1) => 0; + lfsr_btree_push(&lfs, &btree, 0, LFSR_TAG_INLINED, 1, + LFSR_DATA_BUF("a", 1)) => 0; + lfsr_btree_push(&lfs, &btree, 1, LFSR_TAG_INLINED, 1, + LFSR_DATA_BUF("b", 1)) => 0; + lfsr_btree_push(&lfs, &btree, 2, LFSR_TAG_INLINED, 1, + LFSR_DATA_BUF("c", 1)) => 0; printf("btree: w%d 0x%x.%x\n", - btree.weight, - btree.root.block, - btree.root.trunk); + btree.weight, + btree.root.block, + btree.root.trunk); assert(lfsr_btree_weight(&btree) == 3); // try looking up tags @@ -248,13 +256,16 @@ code = ''' // create a two-entry tree lfsr_btree_t btree = LFSR_BTREE_NULL; - lfsr_btree_push(&lfs, &btree, 0, LFSR_TAG_INLINED, 1, "c", 1) => 0; - lfsr_btree_push(&lfs, &btree, 0, LFSR_TAG_INLINED, 1, "b", 1) => 0; - lfsr_btree_push(&lfs, &btree, 0, LFSR_TAG_INLINED, 1, "a", 1) => 0; + lfsr_btree_push(&lfs, &btree, 0, LFSR_TAG_INLINED, 1, + LFSR_DATA_BUF("c", 1)) => 0; + lfsr_btree_push(&lfs, &btree, 0, LFSR_TAG_INLINED, 1, + LFSR_DATA_BUF("b", 1)) => 0; + lfsr_btree_push(&lfs, &btree, 0, LFSR_TAG_INLINED, 1, + LFSR_DATA_BUF("a", 1)) => 0; printf("btree: w%d 0x%x.%x\n", - btree.weight, - btree.root.block, - btree.root.trunk); + btree.weight, + btree.root.block, + btree.root.trunk); assert(lfsr_btree_weight(&btree) == 3); // try looking up tags @@ -311,7 +322,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, - &alphas[i % 26], 1); + LFSR_DATA_BUF(&alphas[i % 26], 1)); // ignore space issues if (err == LFS_ERR_NOSPC) { break; @@ -320,9 +331,9 @@ code = ''' n += 1; } printf("btree: w%d 0x%x.%x\n", - btree.weight, - btree.root.block, - btree.root.trunk); + btree.weight, + btree.root.block, + btree.root.trunk); assert(lfsr_btree_weight(&btree) == n); // check that the elements are in the tree @@ -366,7 +377,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, - &alphas[(N-1-i) % 26], 1); + LFSR_DATA_BUF(&alphas[(N-1-i) % 26], 1)); // ignore space issues if (err == LFS_ERR_NOSPC) { break; @@ -375,9 +386,9 @@ code = ''' n += 1; } printf("btree: w%d 0x%x.%x\n", - btree.weight, - btree.root.block, - btree.root.trunk); + btree.weight, + btree.root.block, + btree.root.trunk); assert(lfsr_btree_weight(&btree) == n); // check that the elements are in the tree @@ -446,7 +457,7 @@ code = ''' // add to btree int err = lfsr_btree_push(&lfs, &btree, id, LFSR_TAG_INLINED, 1, - &alphas[i % 26], 1); + LFSR_DATA_BUF(&alphas[i % 26], 1)); // ignore space issues if (err == LFS_ERR_NOSPC) { break; @@ -471,9 +482,9 @@ code = ''' } printf("]\n"); printf("btree: w%d 0x%x.%x\n", - btree.weight, - btree.root.block, - btree.root.trunk); + btree.weight, + btree.root.block, + btree.root.trunk); assert(lfsr_btree_weight(&btree) == sim_size); uint8_t buffer[4]; @@ -521,7 +532,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, - &alphas[i % 26], 1); + LFSR_DATA_BUF(&alphas[i % 26], 1)); // ignore space issues if (err == LFS_ERR_NOSPC) { break; @@ -530,9 +541,9 @@ code = ''' n += 1; } printf("btree: w%d 0x%x.%x\n", - btree.weight, - btree.root.block, - btree.root.trunk); + btree.weight, + btree.root.block, + btree.root.trunk); assert(lfsr_btree_weight(&btree) == n*W); // check that the elements are in the tree @@ -631,7 +642,7 @@ code = ''' // add to btree int err = lfsr_btree_push(&lfs, &btree, weighted_id, LFSR_TAG_INLINED, weight, - &alphas[i % 26], 1); + LFSR_DATA_BUF(&alphas[i % 26], 1)); // ignore space issues if (err == LFS_ERR_NOSPC) { break; @@ -666,9 +677,9 @@ code = ''' } printf("]\n"); printf("btree: w%d 0x%x.%x\n", - btree.weight, - btree.root.block, - btree.root.trunk); + btree.weight, + btree.root.block, + btree.root.trunk); lfs_size_t total_weight = 0; for (lfs_size_t j = 0; j < sim_size; j++) { @@ -748,13 +759,15 @@ code = ''' // create a single-entry tree lfsr_btree_t btree = LFSR_BTREE_NULL; - lfsr_btree_push(&lfs, &btree, 0, LFSR_TAG_INLINED, 1, "a", 1) => 0; + lfsr_btree_push(&lfs, &btree, 0, LFSR_TAG_INLINED, 1, + LFSR_DATA_BUF("a", 1)) => 0; // update the tree - lfsr_btree_update(&lfs, &btree, 0, LFSR_TAG_INLINED, 1, "A", 1) => 0; + lfsr_btree_update(&lfs, &btree, 0, LFSR_TAG_INLINED, 1, + LFSR_DATA_BUF("A", 1)) => 0; printf("btree: w%d 0x%x.%x\n", - btree.weight, - btree.root.block, - btree.root.trunk); + btree.weight, + btree.root.block, + btree.root.trunk); assert(lfsr_btree_weight(&btree) == 1); // try looking up tags @@ -790,15 +803,19 @@ code = ''' // create a two-entry tree lfsr_btree_t btree = LFSR_BTREE_NULL; - lfsr_btree_push(&lfs, &btree, 0, LFSR_TAG_INLINED, 1, "a", 1) => 0; - lfsr_btree_push(&lfs, &btree, 1, LFSR_TAG_INLINED, 1, "b", 1) => 0; + lfsr_btree_push(&lfs, &btree, 0, LFSR_TAG_INLINED, 1, + LFSR_DATA_BUF("a", 1)) => 0; + lfsr_btree_push(&lfs, &btree, 1, LFSR_TAG_INLINED, 1, + LFSR_DATA_BUF("b", 1)) => 0; // update the tree - lfsr_btree_update(&lfs, &btree, 0, LFSR_TAG_INLINED, 1, "A", 1) => 0; - lfsr_btree_update(&lfs, &btree, 1, LFSR_TAG_INLINED, 1, "B", 1) => 0; + lfsr_btree_update(&lfs, &btree, 0, LFSR_TAG_INLINED, 1, + LFSR_DATA_BUF("A", 1)) => 0; + lfsr_btree_update(&lfs, &btree, 1, LFSR_TAG_INLINED, 1, + LFSR_DATA_BUF("B", 1)) => 0; printf("btree: w%d 0x%x.%x\n", - btree.weight, - btree.root.block, - btree.root.trunk); + btree.weight, + btree.root.block, + btree.root.trunk); assert(lfsr_btree_weight(&btree) == 2); // try looking up tags @@ -841,17 +858,23 @@ code = ''' // create a two-entry tree lfsr_btree_t btree = LFSR_BTREE_NULL; - lfsr_btree_push(&lfs, &btree, 0, LFSR_TAG_INLINED, 1, "a", 1) => 0; - lfsr_btree_push(&lfs, &btree, 1, LFSR_TAG_INLINED, 1, "b", 1) => 0; - lfsr_btree_push(&lfs, &btree, 2, LFSR_TAG_INLINED, 1, "c", 1) => 0; + lfsr_btree_push(&lfs, &btree, 0, LFSR_TAG_INLINED, 1, + LFSR_DATA_BUF("a", 1)) => 0; + lfsr_btree_push(&lfs, &btree, 1, LFSR_TAG_INLINED, 1, + LFSR_DATA_BUF("b", 1)) => 0; + lfsr_btree_push(&lfs, &btree, 2, LFSR_TAG_INLINED, 1, + LFSR_DATA_BUF("c", 1)) => 0; // update the tree - lfsr_btree_update(&lfs, &btree, 0, LFSR_TAG_INLINED, 1, "A", 1) => 0; - lfsr_btree_update(&lfs, &btree, 1, LFSR_TAG_INLINED, 1, "B", 1) => 0; - lfsr_btree_update(&lfs, &btree, 2, LFSR_TAG_INLINED, 1, "C", 1) => 0; + lfsr_btree_update(&lfs, &btree, 0, LFSR_TAG_INLINED, 1, + LFSR_DATA_BUF("A", 1)) => 0; + lfsr_btree_update(&lfs, &btree, 1, LFSR_TAG_INLINED, 1, + LFSR_DATA_BUF("B", 1)) => 0; + lfsr_btree_update(&lfs, &btree, 2, LFSR_TAG_INLINED, 1, + LFSR_DATA_BUF("C", 1)) => 0; printf("btree: w%d 0x%x.%x\n", - btree.weight, - btree.root.block, - btree.root.trunk); + btree.weight, + btree.root.block, + btree.root.trunk); assert(lfsr_btree_weight(&btree) == 3); // try looking up tags @@ -906,13 +929,13 @@ 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, - &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", - btree.weight, - btree.root.block, - btree.root.trunk); + btree.weight, + btree.root.block, + btree.root.trunk); return; } assert(err == 0); @@ -920,21 +943,21 @@ code = ''' // update the tree for (lfs_size_t i = 0; i < N; i++) { int err = lfsr_btree_update(&lfs, &btree, i, LFSR_TAG_INLINED, 1, - &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", - btree.weight, - btree.root.block, - btree.root.trunk); + btree.weight, + btree.root.block, + btree.root.trunk); return; } assert(err == 0); } printf("btree: w%d 0x%x.%x\n", - btree.weight, - btree.root.block, - btree.root.trunk); + btree.weight, + btree.root.block, + btree.root.trunk); assert(lfsr_btree_weight(&btree) == N); // check that the elements are in the tree @@ -990,13 +1013,13 @@ 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, - &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", - btree.weight, - btree.root.block, - btree.root.trunk); + btree.weight, + btree.root.block, + btree.root.trunk); return; } assert(err == 0); @@ -1018,7 +1041,7 @@ code = ''' // update btree int err = lfsr_btree_update(&lfs, &btree, id, LFSR_TAG_INLINED, 1, - &uppers[i % 26], 1); + LFSR_DATA_BUF(&uppers[i % 26], 1)); // ignore space issues if (err == LFS_ERR_NOSPC) { break; @@ -1041,9 +1064,9 @@ code = ''' } printf("]\n"); printf("btree: w%d 0x%x.%x\n", - btree.weight, - btree.root.block, - btree.root.trunk); + btree.weight, + btree.root.block, + btree.root.trunk); assert(lfsr_btree_weight(&btree) == N); uint8_t buffer[4]; @@ -1090,13 +1113,13 @@ 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, - &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", - btree.weight, - btree.root.block, - btree.root.trunk); + btree.weight, + btree.root.block, + btree.root.trunk); return; } assert(err == 0); @@ -1104,21 +1127,21 @@ code = ''' // update the tree for (lfs_size_t i = 0; i < N; i++) { int err = lfsr_btree_update(&lfs, &btree, i*W+W-1, LFSR_TAG_INLINED, W, - &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", - btree.weight, - btree.root.block, - btree.root.trunk); + btree.weight, + btree.root.block, + btree.root.trunk); return; } assert(err == 0); } printf("btree: w%d 0x%x.%x\n", - btree.weight, - btree.root.block, - btree.root.trunk); + btree.weight, + btree.root.block, + btree.root.trunk); assert(lfsr_btree_weight(&btree) == N*W); // check that the elements are in the tree @@ -1193,13 +1216,13 @@ 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, - &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", - btree.weight, - btree.root.block, - btree.root.trunk); + btree.weight, + btree.root.block, + btree.root.trunk); return; } assert(err == 0); @@ -1232,7 +1255,7 @@ code = ''' // update btree int err = lfsr_btree_update(&lfs, &btree, weighted_id+sim_weights[id]-1, LFSR_TAG_INLINED, weight, - &uppers[i % 26], 1); + LFSR_DATA_BUF(&uppers[i % 26], 1)); // ignore space issues if (err == LFS_ERR_NOSPC) { break; @@ -1263,9 +1286,9 @@ code = ''' } printf("]\n"); printf("btree: w%d 0x%x.%x\n", - btree.weight, - btree.root.block, - btree.root.trunk); + btree.weight, + btree.root.block, + btree.root.trunk); lfs_size_t total_weight = 0; for (lfs_size_t j = 0; j < N; j++) { @@ -1346,13 +1369,14 @@ code = ''' // create a single-entry tree lfsr_btree_t btree = LFSR_BTREE_NULL; - lfsr_btree_push(&lfs, &btree, 0, LFSR_TAG_INLINED, 1, "a", 1) => 0; + lfsr_btree_push(&lfs, &btree, 0, LFSR_TAG_INLINED, 1, + LFSR_DATA_BUF("a", 1)) => 0; // pop! lfsr_btree_pop(&lfs, &btree, 0) => 0; printf("btree: w%d 0x%x.%x\n", - btree.weight, - btree.root.block, - btree.root.trunk); + btree.weight, + btree.root.block, + btree.root.trunk); assert(lfsr_btree_weight(&btree) == 0); // try looking up tags @@ -1365,11 +1389,12 @@ code = ''' buffer, 4, VALIDATE) => LFS_ERR_NOENT; // try to putting it back to see if things still work - lfsr_btree_push(&lfs, &btree, 0, LFSR_TAG_INLINED, 1, "A", 1) => 0; + lfsr_btree_push(&lfs, &btree, 0, LFSR_TAG_INLINED, 1, + LFSR_DATA_BUF("A", 1)) => 0; printf("btree: w%d 0x%x.%x\n", - btree.weight, - btree.root.block, - btree.root.trunk); + btree.weight, + btree.root.block, + btree.root.trunk); assert(lfsr_btree_weight(&btree) == 1); // try looking up tags @@ -1401,14 +1426,16 @@ code = ''' // create a single-entry tree lfsr_btree_t btree = LFSR_BTREE_NULL; - lfsr_btree_push(&lfs, &btree, 0, LFSR_TAG_INLINED, 1, "a", 1) => 0; - lfsr_btree_push(&lfs, &btree, 1, LFSR_TAG_INLINED, 1, "b", 1) => 0; + lfsr_btree_push(&lfs, &btree, 0, LFSR_TAG_INLINED, 1, + LFSR_DATA_BUF("a", 1)) => 0; + lfsr_btree_push(&lfs, &btree, 1, LFSR_TAG_INLINED, 1, + LFSR_DATA_BUF("b", 1)) => 0; // pop! lfsr_btree_pop(&lfs, &btree, 1) => 0; printf("btree: w%d 0x%x.%x\n", - btree.weight, - btree.root.block, - btree.root.trunk); + btree.weight, + btree.root.block, + btree.root.trunk); assert(lfsr_btree_weight(&btree) == 1); // try looking up tags @@ -1428,11 +1455,12 @@ code = ''' buffer, 4, VALIDATE) => LFS_ERR_NOENT; // try to putting it back to see if things still work - lfsr_btree_push(&lfs, &btree, 1, LFSR_TAG_INLINED, 1, "B", 1) => 0; + lfsr_btree_push(&lfs, &btree, 1, LFSR_TAG_INLINED, 1, + LFSR_DATA_BUF("B", 1)) => 0; printf("btree: w%d 0x%x.%x\n", - btree.weight, - btree.root.block, - btree.root.trunk); + btree.weight, + btree.root.block, + btree.root.trunk); assert(lfsr_btree_weight(&btree) == 2); // try looking up tags @@ -1471,14 +1499,16 @@ code = ''' // create a single-entry tree lfsr_btree_t btree = LFSR_BTREE_NULL; - lfsr_btree_push(&lfs, &btree, 0, LFSR_TAG_INLINED, 1, "a", 1) => 0; - lfsr_btree_push(&lfs, &btree, 1, LFSR_TAG_INLINED, 1, "b", 1) => 0; + lfsr_btree_push(&lfs, &btree, 0, LFSR_TAG_INLINED, 1, + LFSR_DATA_BUF("a", 1)) => 0; + lfsr_btree_push(&lfs, &btree, 1, LFSR_TAG_INLINED, 1, + LFSR_DATA_BUF("b", 1)) => 0; // pop! lfsr_btree_pop(&lfs, &btree, 0) => 0; printf("btree: w%d 0x%x.%x\n", - btree.weight, - btree.root.block, - btree.root.trunk); + btree.weight, + btree.root.block, + btree.root.trunk); assert(lfsr_btree_weight(&btree) == 1); // try looking up tags @@ -1498,11 +1528,12 @@ code = ''' buffer, 4, VALIDATE) => LFS_ERR_NOENT; // try to putting it back to see if things still work - lfsr_btree_push(&lfs, &btree, 0, LFSR_TAG_INLINED, 1, "A", 1) => 0; + lfsr_btree_push(&lfs, &btree, 0, LFSR_TAG_INLINED, 1, + LFSR_DATA_BUF("A", 1)) => 0; printf("btree: w%d 0x%x.%x\n", - btree.weight, - btree.root.block, - btree.root.trunk); + btree.weight, + btree.root.block, + btree.root.trunk); assert(lfsr_btree_weight(&btree) == 2); // try looking up tags @@ -1541,15 +1572,18 @@ code = ''' // create a single-entry tree lfsr_btree_t btree = LFSR_BTREE_NULL; - lfsr_btree_push(&lfs, &btree, 0, LFSR_TAG_INLINED, 1, "a", 1) => 0; - lfsr_btree_push(&lfs, &btree, 1, LFSR_TAG_INLINED, 1, "b", 1) => 0; - lfsr_btree_push(&lfs, &btree, 2, LFSR_TAG_INLINED, 1, "c", 1) => 0; + lfsr_btree_push(&lfs, &btree, 0, LFSR_TAG_INLINED, 1, + LFSR_DATA_BUF("a", 1)) => 0; + lfsr_btree_push(&lfs, &btree, 1, LFSR_TAG_INLINED, 1, + LFSR_DATA_BUF("b", 1)) => 0; + lfsr_btree_push(&lfs, &btree, 2, LFSR_TAG_INLINED, 1, + LFSR_DATA_BUF("c", 1)) => 0; // pop! lfsr_btree_pop(&lfs, &btree, 2) => 0; printf("btree: w%d 0x%x.%x\n", - btree.weight, - btree.root.block, - btree.root.trunk); + btree.weight, + btree.root.block, + btree.root.trunk); assert(lfsr_btree_weight(&btree) == 2); // try looking up tags @@ -1576,11 +1610,12 @@ code = ''' buffer, 4, VALIDATE) => LFS_ERR_NOENT; // try to putting it back to see if things still work - lfsr_btree_push(&lfs, &btree, 2, LFSR_TAG_INLINED, 1, "C", 1) => 0; + lfsr_btree_push(&lfs, &btree, 2, LFSR_TAG_INLINED, 1, + LFSR_DATA_BUF("C", 1)) => 0; printf("btree: w%d 0x%x.%x\n", - btree.weight, - btree.root.block, - btree.root.trunk); + btree.weight, + btree.root.block, + btree.root.trunk); assert(lfsr_btree_weight(&btree) == 3); // try looking up tags @@ -1632,13 +1667,13 @@ 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, - &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", - btree.weight, - btree.root.block, - btree.root.trunk); + btree.weight, + btree.root.block, + btree.root.trunk); return; } assert(err == 0); @@ -1649,18 +1684,18 @@ code = ''' // ignore space issues if (err == LFS_ERR_NOSPC) { printf("btree: w%d 0x%x.%x\n", - btree.weight, - btree.root.block, - btree.root.trunk); + btree.weight, + btree.root.block, + btree.root.trunk); return; } assert(err == 0); } printf("btree: w%d 0x%x.%x\n", - btree.weight, - btree.root.block, - btree.root.trunk); + btree.weight, + btree.root.block, + btree.root.trunk); assert(lfsr_btree_weight(&btree) == REMAINING); // check that the elements are in the tree @@ -1684,7 +1719,7 @@ code = ''' // try recovering lfsr_btree_push(&lfs, &btree, REMAINING, LFSR_TAG_INLINED, 1, - "R", 1) => 0; + LFSR_DATA_BUF("R", 1)) => 0; for (lfs_size_t i = 0; i < REMAINING; i++) { lfsr_btree_get(&lfs, &btree, i, @@ -1729,13 +1764,13 @@ 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, - &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", - btree.weight, - btree.root.block, - btree.root.trunk); + btree.weight, + btree.root.block, + btree.root.trunk); return; } assert(err == 0); @@ -1746,17 +1781,17 @@ code = ''' // ignore space issues if (err == LFS_ERR_NOSPC) { printf("btree: w%d 0x%x.%x\n", - btree.weight, - btree.root.block, - btree.root.trunk); + btree.weight, + btree.root.block, + btree.root.trunk); return; } assert(err == 0); } printf("btree: w%d 0x%x.%x\n", - btree.weight, - btree.root.block, - btree.root.trunk); + btree.weight, + btree.root.block, + btree.root.trunk); assert(lfsr_btree_weight(&btree) == REMAINING); // check that the elements are in the tree @@ -1780,7 +1815,7 @@ code = ''' // try recovering lfsr_btree_push(&lfs, &btree, 0, LFSR_TAG_INLINED, 1, - "R", 1) => 0; + LFSR_DATA_BUF("R", 1)) => 0; lfsr_btree_get(&lfs, &btree, 0, &tag_, &weight_, @@ -1837,13 +1872,13 @@ 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, - &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", - btree.weight, - btree.root.block, - btree.root.trunk); + btree.weight, + btree.root.block, + btree.root.trunk); return; } assert(err == 0); @@ -1889,9 +1924,9 @@ code = ''' } printf("]\n"); printf("btree: w%d 0x%x.%x\n", - btree.weight, - btree.root.block, - btree.root.trunk); + btree.weight, + btree.root.block, + btree.root.trunk); assert(lfsr_btree_weight(&btree) == sim_size); uint8_t buffer[4]; @@ -1939,13 +1974,13 @@ 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, - &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", - btree.weight, - btree.root.block, - btree.root.trunk); + btree.weight, + btree.root.block, + btree.root.trunk); return; } assert(err == 0); @@ -1956,17 +1991,17 @@ code = ''' // ignore space issues if (err == LFS_ERR_NOSPC) { printf("btree: w%d 0x%x.%x\n", - btree.weight, - btree.root.block, - btree.root.trunk); + btree.weight, + btree.root.block, + btree.root.trunk); return; } assert(err == 0); } printf("btree: w%d 0x%x.%x\n", - btree.weight, - btree.root.block, - btree.root.trunk); + btree.weight, + btree.root.block, + btree.root.trunk); assert(lfsr_btree_weight(&btree) == REMAINING*W); // check that the elements are in the tree @@ -1990,7 +2025,7 @@ code = ''' // try recovering lfsr_btree_push(&lfs, &btree, REMAINING*W, LFSR_TAG_INLINED, W, - "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, @@ -2098,13 +2133,13 @@ code = ''' int err = lfsr_btree_push(&lfs, &btree, weighted_id, LFSR_TAG_INLINED, weight, - &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", - btree.weight, - btree.root.block, - btree.root.trunk); + btree.weight, + btree.root.block, + btree.root.trunk); return; } assert(err == 0); @@ -2159,9 +2194,9 @@ code = ''' } printf("]\n"); printf("btree: w%d 0x%x.%x\n", - btree.weight, - btree.root.block, - btree.root.trunk); + btree.weight, + btree.root.block, + btree.root.trunk); lfs_size_t total_weight = 0; for (lfs_size_t j = 0; j < sim_size; j++) { @@ -2242,12 +2277,12 @@ code = ''' lfsr_btree_t btree = LFSR_BTREE_NULL; const char *alphas = "abcdefghijklmnopqrstuvwxyz"; lfsr_btree_push(&lfs, &btree, 0, LFSR_TAG_INLINED, 1, - &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, &alphas[(i-1) % 26], 1, - LFSR_TAG_INLINED, 1, &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; @@ -2256,9 +2291,9 @@ code = ''' n += 1; } printf("btree: w%d 0x%x.%x\n", - btree.weight, - btree.root.block, - btree.root.trunk); + btree.weight, + btree.root.block, + btree.root.trunk); assert(lfsr_btree_weight(&btree) == n); // check that the elements are in the tree @@ -2313,7 +2348,7 @@ code = ''' // create a btree lfsr_btree_t btree = LFSR_BTREE_NULL; lfsr_btree_push(&lfs, &btree, 0, LFSR_TAG_INLINED, 1, - "_", 1) => 0; + LFSR_DATA_BUF("_", 1)) => 0; // set up a simulation to compare against // @@ -2331,8 +2366,8 @@ code = ''' // split btree int err = lfsr_btree_split(&lfs, &btree, id, LFSR_DATA_NULL, - LFSR_TAG_INLINED, 1, &alphas[i % 26], 1, - LFSR_TAG_INLINED, 1, &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; @@ -2358,9 +2393,9 @@ code = ''' } printf("]\n"); printf("btree: w%d 0x%x.%x\n", - btree.weight, - btree.root.block, - btree.root.trunk); + btree.weight, + btree.root.block, + btree.root.trunk); assert(lfsr_btree_weight(&btree) == sim_size); uint8_t buffer[4]; @@ -2406,12 +2441,12 @@ code = ''' lfsr_btree_t btree = LFSR_BTREE_NULL; const char *alphas = "abcdefghijklmnopqrstuvwxyz"; lfsr_btree_push(&lfs, &btree, 0, LFSR_TAG_INLINED, W, - &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, &alphas[(i-1) % 26], 1, - LFSR_TAG_INLINED, W, &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; @@ -2420,9 +2455,9 @@ code = ''' n += 1; } printf("btree: w%d 0x%x.%x\n", - btree.weight, - btree.root.block, - btree.root.trunk); + btree.weight, + btree.root.block, + btree.root.trunk); assert(lfsr_btree_weight(&btree) == n*W); // check that the elements are in the tree @@ -2478,7 +2513,7 @@ code = ''' // create a btree lfsr_btree_t btree = LFSR_BTREE_NULL; lfsr_btree_push(&lfs, &btree, 0, LFSR_TAG_INLINED, W, - "_", 1) => 0; + LFSR_DATA_BUF("_", 1)) => 0; // set up a simulation to compare against // @@ -2509,8 +2544,10 @@ code = ''' // split btree int err = lfsr_btree_split(&lfs, &btree, weighted_id+sim_weights[id]-1, LFSR_DATA_NULL, - LFSR_TAG_INLINED, weight1, &alphas[i % 26], 1, - LFSR_TAG_INLINED, weight2, &uppers[i % 26], 1); + LFSR_TAG_INLINED, weight1, + LFSR_DATA_BUF(&alphas[i % 26], 1), + LFSR_TAG_INLINED, weight2, + LFSR_DATA_BUF(&uppers[i % 26], 1)); // ignore space issues if (err == LFS_ERR_NOSPC) { break; @@ -2547,9 +2584,9 @@ code = ''' } printf("]\n"); printf("btree: w%d 0x%x.%x\n", - btree.weight, - btree.root.block, - btree.root.trunk); + btree.weight, + btree.root.block, + btree.root.trunk); lfs_size_t total_weight = 0; for (lfs_size_t j = 0; j < sim_size; j++) { @@ -2662,7 +2699,7 @@ code = ''' // push to btree int err = lfsr_btree_push(&lfs, &btree, id, LFSR_TAG_INLINED, 1, - &alphas[i % 26], 1); + LFSR_DATA_BUF(&alphas[i % 26], 1)); // ignore space issues if (err == LFS_ERR_NOSPC) { break; @@ -2678,7 +2715,7 @@ code = ''' // update btree int err = lfsr_btree_update(&lfs, &btree, id, LFSR_TAG_INLINED, 1, - &alphas[i % 26], 1); + LFSR_DATA_BUF(&alphas[i % 26], 1)); // ignore space issues if (err == LFS_ERR_NOSPC) { break; @@ -2715,9 +2752,9 @@ code = ''' } printf("]\n"); printf("btree: w%d 0x%x.%x\n", - btree.weight, - btree.root.block, - btree.root.trunk); + btree.weight, + btree.root.block, + btree.root.trunk); assert(lfsr_btree_weight(&btree) == sim_size); uint8_t buffer[4]; @@ -2803,7 +2840,7 @@ code = ''' // push to btree int err = lfsr_btree_push(&lfs, &btree, weighted_id, LFSR_TAG_INLINED, weight, - &alphas[i % 26], 1); + LFSR_DATA_BUF(&alphas[i % 26], 1)); // ignore space issues if (err == LFS_ERR_NOSPC) { break; @@ -2822,7 +2859,7 @@ code = ''' // update btree int err = lfsr_btree_update(&lfs, &btree, weighted_id+sim_weights[id]-1, LFSR_TAG_INLINED, weight, - &alphas[i % 26], 1); + LFSR_DATA_BUF(&alphas[i % 26], 1)); // ignore space issues if (err == LFS_ERR_NOSPC) { break; @@ -2870,9 +2907,9 @@ code = ''' } printf("]\n"); printf("btree: w%d 0x%x.%x\n", - btree.weight, - btree.root.block, - btree.root.trunk); + btree.weight, + btree.root.block, + btree.root.trunk); lfs_size_t total_weight = 0; for (lfs_size_t j = 0; j < sim_size; j++) { @@ -2950,9 +2987,9 @@ code = ''' // create a zero-entry tree lfsr_btree_t btree = LFSR_BTREE_NULL; printf("btree: w%d 0x%x.%x\n", - btree.weight, - btree.root.block, - btree.root.trunk); + btree.weight, + btree.root.block, + btree.root.trunk); assert(lfsr_btree_weight(&btree) == 0); // try to find tags @@ -2980,11 +3017,12 @@ code = ''' // create a single-entry tree lfsr_btree_t btree = LFSR_BTREE_NULL; - lfsr_btree_push(&lfs, &btree, 0, LFSR_TAG_INLINED, 1, "0", 1) => 0; + lfsr_btree_push(&lfs, &btree, 0, LFSR_TAG_INLINED, 1, + LFSR_DATA_BUF("0", 1)) => 0; printf("btree: w%d 0x%x.%x\n", - btree.weight, - btree.root.block, - btree.root.trunk); + btree.weight, + btree.root.block, + btree.root.trunk); assert(lfsr_btree_weight(&btree) == 1); // try to find tags @@ -3026,14 +3064,15 @@ code = ''' // create a two-entry tree lfsr_btree_t btree = LFSR_BTREE_NULL; - lfsr_btree_push(&lfs, &btree, 0, LFSR_TAG_INLINED, 1, "0", 1) => 0; + lfsr_btree_push(&lfs, &btree, 0, LFSR_TAG_INLINED, 1, + LFSR_DATA_BUF("0", 1)) => 0; lfsr_btree_split(&lfs, &btree, 0, LFSR_DATA_BUF("aab", 3), - LFSR_TAG_INLINED, 1, "0", 1, - LFSR_TAG_INLINED, 1, "1", 1) => 0; + 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.weight, - btree.root.block, - btree.root.trunk); + btree.weight, + btree.root.block, + btree.root.trunk); assert(lfsr_btree_weight(&btree) == 2); // try to find tags @@ -3083,17 +3122,18 @@ code = ''' // create a two-entry tree lfsr_btree_t btree = LFSR_BTREE_NULL; - lfsr_btree_push(&lfs, &btree, 0, LFSR_TAG_INLINED, 1, "0", 1) => 0; + lfsr_btree_push(&lfs, &btree, 0, LFSR_TAG_INLINED, 1, + LFSR_DATA_BUF("0", 1)) => 0; lfsr_btree_split(&lfs, &btree, 0, LFSR_DATA_BUF("aab", 3), - LFSR_TAG_INLINED, 1, "0", 1, - LFSR_TAG_INLINED, 1, "1", 1) => 0; + 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_BUF("aac", 3), - LFSR_TAG_INLINED, 1, "1", 1, - LFSR_TAG_INLINED, 1, "2", 1) => 0; + 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.weight, - btree.root.block, - btree.root.trunk); + btree.weight, + btree.root.block, + btree.root.trunk); assert(lfsr_btree_weight(&btree) == 3); // try to find tags @@ -3151,17 +3191,18 @@ code = ''' // create a two-entry tree lfsr_btree_t btree = LFSR_BTREE_NULL; - lfsr_btree_push(&lfs, &btree, 0, LFSR_TAG_INLINED, 1, "0", 1) => 0; + lfsr_btree_push(&lfs, &btree, 0, LFSR_TAG_INLINED, 1, + LFSR_DATA_BUF("0", 1)) => 0; lfsr_btree_split(&lfs, &btree, 0, LFSR_DATA_BUF("aac", 3), - LFSR_TAG_INLINED, 1, "1", 1, - LFSR_TAG_INLINED, 1, "2", 1) => 0; + 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_BUF("aab", 3), - LFSR_TAG_INLINED, 1, "0", 1, - LFSR_TAG_INLINED, 1, "1", 1) => 0; + 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.weight, - btree.root.block, - btree.root.trunk); + btree.weight, + btree.root.block, + btree.root.trunk); assert(lfsr_btree_weight(&btree) == 3); // try to find tags @@ -3223,15 +3264,15 @@ code = ''' const char *alphas = "abcdefghijklmnopqrstuvwxyz"; const char *nums = "0123456789"; lfsr_btree_push(&lfs, &btree, 0, LFSR_TAG_INLINED, 1, - &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_BUF(name, 3), - LFSR_TAG_INLINED, 1, &nums[(i-1) % 10], 1, - LFSR_TAG_INLINED, 1, &nums[(i-0) % 10], 1); + 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; @@ -3240,9 +3281,9 @@ code = ''' n += 1; } printf("btree: w%d 0x%x.%x\n", - btree.weight, - btree.root.block, - btree.root.trunk); + btree.weight, + btree.root.block, + btree.root.trunk); assert(lfsr_btree_weight(&btree) == n); // try to find tags @@ -3298,7 +3339,7 @@ code = ''' // create a btree lfsr_btree_t btree = LFSR_BTREE_NULL; lfsr_btree_push(&lfs, &btree, 0, LFSR_TAG_INLINED, 1, - "_", 1) => 0; + LFSR_DATA_BUF("_", 1)) => 0; // set up a simulation to compare against // @@ -3332,8 +3373,8 @@ code = ''' // split btree int err = lfsr_btree_split(&lfs, &btree, id, LFSR_DATA_BUF(name, 3), - LFSR_TAG_INLINED, 1, &nums[i % 10], 1, - LFSR_TAG_INLINED, 1, &nums[i % 10], 1); + 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; @@ -3361,9 +3402,9 @@ code = ''' } printf("]\n"); printf("btree: w%d 0x%x.%x\n", - btree.weight, - btree.root.block, - btree.root.trunk); + btree.weight, + btree.root.block, + btree.root.trunk); assert(lfsr_btree_weight(&btree) == sim_size); uint8_t buffer[4]; @@ -3408,7 +3449,7 @@ code = ''' const char *alphas = "abcdefghijklmnopqrstuvwxyz"; const char *nums = "0123456789"; lfsr_btree_push(&lfs, &btree, 0, LFSR_TAG_INLINED, W, - &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] = { @@ -3416,8 +3457,8 @@ code = ''' }; int err = lfsr_btree_split(&lfs, &btree, (i-1)*W+W-1, LFSR_DATA_BUF(name, 3), - LFSR_TAG_INLINED, W, &nums[(i-1) % 10], 1, - LFSR_TAG_INLINED, W, &nums[(i-0) % 10], 1); + 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; @@ -3426,9 +3467,9 @@ code = ''' n += 1; } printf("btree: w%d 0x%x.%x\n", - btree.weight, - btree.root.block, - btree.root.trunk); + btree.weight, + btree.root.block, + btree.root.trunk); assert(lfsr_btree_weight(&btree) == n*W); // try to find tags @@ -3485,7 +3526,7 @@ code = ''' // create a btree lfsr_btree_t btree = LFSR_BTREE_NULL; lfsr_btree_push(&lfs, &btree, 0, LFSR_TAG_INLINED, W, - "_", 1) => 0; + LFSR_DATA_BUF("_", 1)) => 0; // set up a simulation to compare against // @@ -3532,8 +3573,8 @@ code = ''' // split btree int err = lfsr_btree_split(&lfs, &btree, weighted_id+sim_weights[id]-1, LFSR_DATA_BUF(name, 3), - LFSR_TAG_INLINED, weight1, &nums[i % 10], 1, - LFSR_TAG_INLINED, weight2, &nums[i % 10], 1); + 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; @@ -3575,9 +3616,9 @@ code = ''' } printf("]\n"); printf("btree: w%d 0x%x.%x\n", - btree.weight, - btree.root.block, - btree.root.trunk); + btree.weight, + btree.root.block, + btree.root.trunk); lfs_size_t total_weight = 0; for (lfs_size_t j = 0; j < sim_size; j++) { @@ -3646,7 +3687,7 @@ code = ''' // create a btree lfsr_btree_t btree = LFSR_BTREE_NULL; lfsr_btree_push(&lfs, &btree, 0, LFSR_TAG_INLINED, 1, - "_", 1) => 0; + LFSR_DATA_BUF("_", 1)) => 0; // set up a simulation to compare against // @@ -3695,8 +3736,10 @@ code = ''' if (split_id > id) { int err = lfsr_btree_split(&lfs, &btree, split_id, LFSR_DATA_BUF(sim_names[id+1], 3), - LFSR_TAG_INLINED, 1, &nums[i % 10], 1, - LFSR_TAG_INLINED, 1, split_buf, 1); + 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; @@ -3705,8 +3748,10 @@ code = ''' } else { int err = lfsr_btree_split(&lfs, &btree, split_id, LFSR_DATA_BUF(name, 3), - LFSR_TAG_INLINED, 1, split_buf, 1, - LFSR_TAG_INLINED, 1, &nums[i % 10], 1); + 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; @@ -3725,7 +3770,7 @@ code = ''' // update btree int err = lfsr_btree_update(&lfs, &btree, id, LFSR_TAG_INLINED, 1, - &nums[i % 10], 1); + LFSR_DATA_BUF(&nums[i % 10], 1)); // ignore space issues if (err == LFS_ERR_NOSPC) { break; @@ -3769,9 +3814,9 @@ code = ''' } printf("]\n"); printf("btree: w%d 0x%x.%x\n", - btree.weight, - btree.root.block, - btree.root.trunk); + btree.weight, + btree.root.block, + btree.root.trunk); assert(lfsr_btree_weight(&btree) == sim_size); uint8_t buffer[4]; @@ -3827,7 +3872,7 @@ code = ''' // create a btree lfsr_btree_t btree = LFSR_BTREE_NULL; lfsr_btree_push(&lfs, &btree, 0, LFSR_TAG_INLINED, W, - "_", 1) => 0; + LFSR_DATA_BUF("_", 1)) => 0; // set up a simulation to compare against // @@ -3895,8 +3940,10 @@ code = ''' if (split_id > weighted_id+sim_weights[id]-1) { int err = lfsr_btree_split(&lfs, &btree, split_id, LFSR_DATA_BUF(sim_names[id+1], 3), - LFSR_TAG_INLINED, weight, &nums[i % 10], 1, - LFSR_TAG_INLINED, split_weight, split_buf, 1); + LFSR_TAG_INLINED, weight, + LFSR_DATA_BUF(&nums[i % 10], 1), + LFSR_TAG_INLINED, split_weight, + LFSR_DATA_BUF(split_buf, 1)); // ignore space issues if (err == LFS_ERR_NOSPC) { break; @@ -3905,8 +3952,10 @@ code = ''' } else { int err = lfsr_btree_split(&lfs, &btree, split_id, LFSR_DATA_BUF(name, 3), - LFSR_TAG_INLINED, split_weight, split_buf, 1, - LFSR_TAG_INLINED, weight, &nums[i % 10], 1); + LFSR_TAG_INLINED, split_weight, + LFSR_DATA_BUF(split_buf, 1), + LFSR_TAG_INLINED, weight, + LFSR_DATA_BUF(&nums[i % 10], 1)); // ignore space issues if (err == LFS_ERR_NOSPC) { break; @@ -3928,7 +3977,7 @@ code = ''' // update btree int err = lfsr_btree_update(&lfs, &btree, weighted_id+sim_weights[id]-1, LFSR_TAG_INLINED, weight, - &nums[i % 10], 1); + LFSR_DATA_BUF(&nums[i % 10], 1)); // ignore space issues if (err == LFS_ERR_NOSPC) { break; @@ -3986,9 +4035,9 @@ code = ''' } printf("]\n"); printf("btree: w%d 0x%x.%x\n", - btree.weight, - btree.root.block, - btree.root.trunk); + btree.weight, + btree.root.block, + btree.root.trunk); lfs_size_t total_weight = 0; for (lfs_size_t j = 0; j < sim_size; j++) {