diff options
author | Kent Overstreet <kent.overstreet@linux.dev> | 2023-03-04 22:06:01 -0500 |
---|---|---|
committer | Kent Overstreet <kent.overstreet@linux.dev> | 2023-03-04 23:33:30 -0500 |
commit | 7709585c2afad361e0e3d699e40967f093eacbfa (patch) | |
tree | fd06afe182979bbd5237f447391271cace9850c7 /rust-src/src | |
parent | b0c9ad15f4e5cee60973a8f5f6dc49acfeec9755 (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.rs | 47 |
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")] |