summaryrefslogtreecommitdiff
path: root/rust-src/src
diff options
context:
space:
mode:
authorKent Overstreet <kent.overstreet@linux.dev>2023-03-04 22:06:01 -0500
committerKent Overstreet <kent.overstreet@linux.dev>2023-03-04 23:33:30 -0500
commit7709585c2afad361e0e3d699e40967f093eacbfa (patch)
treefd06afe182979bbd5237f447391271cace9850c7 /rust-src/src
parentb0c9ad15f4e5cee60973a8f5f6dc49acfeec9755 (diff)
rust: Implement BtreeNodeIter
This implements BtreeNodeIter, and adds it to cmd_list.rs - the next step in having a full replacement for cmd_list.c Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev>
Diffstat (limited to 'rust-src/src')
-rw-r--r--rust-src/src/cmd_list.rs47
1 files changed, 46 insertions, 1 deletions
diff --git a/rust-src/src/cmd_list.rs b/rust-src/src/cmd_list.rs
index c89ba4f0..fb7cb1b2 100644
--- a/rust-src/src/cmd_list.rs
+++ b/rust-src/src/cmd_list.rs
@@ -5,6 +5,7 @@ use bch_bindgen::opt_set;
use bch_bindgen::fs::Fs;
use bch_bindgen::btree::BtreeTrans;
use bch_bindgen::btree::BtreeIter;
+use bch_bindgen::btree::BtreeNodeIter;
use bch_bindgen::btree::BtreeIterFlags;
use clap::Parser;
use colored::Colorize;
@@ -31,24 +32,68 @@ fn list_keys(fs: &Fs, opt: Cli) -> anyhow::Result<()> {
fn list_btree_formats(fs: &Fs, opt: Cli) -> anyhow::Result<()> {
let trans = BtreeTrans::new(fs);
+ let mut iter = BtreeNodeIter::new(&trans, opt.btree, opt.start,
+ 0, opt.level,
+ BtreeIterFlags::PREFETCH);
+
+ while let Some(b) = iter.peek()? {
+ if b.key.k.p > opt.end {
+ break;
+ }
+
+ iter.advance();
+ }
Ok(())
}
fn list_btree_nodes(fs: &Fs, opt: Cli) -> anyhow::Result<()> {
let trans = BtreeTrans::new(fs);
+ let mut iter = BtreeNodeIter::new(&trans, opt.btree, opt.start,
+ 0, opt.level,
+ BtreeIterFlags::PREFETCH);
+
+ while let Some(b) = iter.peek()? {
+ if b.key.k.p > opt.end {
+ break;
+ }
+
+ iter.advance();
+ }
Ok(())
}
fn list_nodes_ondisk(fs: &Fs, opt: Cli) -> anyhow::Result<()> {
let trans = BtreeTrans::new(fs);
+ let mut iter = BtreeNodeIter::new(&trans, opt.btree, opt.start,
+ 0, opt.level,
+ BtreeIterFlags::PREFETCH);
+
+ while let Some(b) = iter.peek()? {
+ if b.key.k.p > opt.end {
+ break;
+ }
+
+ iter.advance();
+ }
Ok(())
}
fn list_nodes_keys(fs: &Fs, opt: Cli) -> anyhow::Result<()> {
let trans = BtreeTrans::new(fs);
+ let mut iter = BtreeNodeIter::new(&trans, opt.btree, opt.start,
+ 0, opt.level,
+ BtreeIterFlags::PREFETCH);
+
+ while let Some(b) = iter.peek()? {
+ if b.key.k.p > opt.end {
+ break;
+ }
+
+ iter.advance();
+ }
Ok(())
}
@@ -70,7 +115,7 @@ struct Cli {
/// Btree depth to descend to (0 == leaves)
#[arg(short, long, default_value_t=0)]
- level: u8,
+ level: u32,
/// Start position to list from
#[arg(short, long, default_value="POS_MIN")]