[thin_check (rust)] BTree values must now implement Copy
This commit is contained in:
parent
bcfb9a73a1
commit
bc058f8baf
@ -634,7 +634,9 @@ fn explore(path: &Path) -> Result<()> {
|
|||||||
panels.push(Box::new(BottomLevelPanel::new(thin_id, node)));
|
panels.push(Box::new(BottomLevelPanel::new(thin_id, node)));
|
||||||
}
|
}
|
||||||
Some(Action::PopPanel) => {
|
Some(Action::PopPanel) => {
|
||||||
panels.pop();
|
if panels.len() > 2 {
|
||||||
|
panels.pop();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
_ => {}
|
_ => {}
|
||||||
},
|
},
|
||||||
|
@ -313,7 +313,7 @@ pub type Result<T> = std::result::Result<T, BTreeError>;
|
|||||||
|
|
||||||
//------------------------------------------
|
//------------------------------------------
|
||||||
|
|
||||||
#[derive(Debug, Clone)]
|
#[derive(Debug, Clone, Copy)]
|
||||||
pub struct NodeHeader {
|
pub struct NodeHeader {
|
||||||
pub block: u64,
|
pub block: u64,
|
||||||
pub is_leaf: bool,
|
pub is_leaf: bool,
|
||||||
@ -824,7 +824,8 @@ impl<V> ValueCollector<V> {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
impl<V: Unpack + Clone> NodeVisitor<V> for ValueCollector<V> {
|
// FIXME: should we be using Copy rather than clone? (Yes)
|
||||||
|
impl<V: Unpack + Copy> NodeVisitor<V> for ValueCollector<V> {
|
||||||
fn visit(&self, _kr: &KeyRange, _h: &NodeHeader, keys: &[u64], values: &[V]) -> Result<()> {
|
fn visit(&self, _kr: &KeyRange, _h: &NodeHeader, keys: &[u64], values: &[V]) -> Result<()> {
|
||||||
let mut vals = self.values.lock().unwrap();
|
let mut vals = self.values.lock().unwrap();
|
||||||
for n in 0..keys.len() {
|
for n in 0..keys.len() {
|
||||||
@ -835,7 +836,7 @@ impl<V: Unpack + Clone> NodeVisitor<V> for ValueCollector<V> {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn btree_to_map<V: Unpack + Clone>(
|
pub fn btree_to_map<V: Unpack + Copy>(
|
||||||
engine: Arc<dyn IoEngine + Send + Sync>,
|
engine: Arc<dyn IoEngine + Send + Sync>,
|
||||||
ignore_non_fatal: bool,
|
ignore_non_fatal: bool,
|
||||||
root: u64,
|
root: u64,
|
||||||
@ -846,7 +847,7 @@ pub fn btree_to_map<V: Unpack + Clone>(
|
|||||||
Ok(visitor.values.into_inner().unwrap())
|
Ok(visitor.values.into_inner().unwrap())
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn btree_to_map_with_sm<V: Unpack + Clone>(
|
pub fn btree_to_map_with_sm<V: Unpack + Copy>(
|
||||||
engine: Arc<dyn IoEngine + Send + Sync>,
|
engine: Arc<dyn IoEngine + Send + Sync>,
|
||||||
sm: Arc<Mutex<dyn SpaceMap + Send + Sync>>,
|
sm: Arc<Mutex<dyn SpaceMap + Send + Sync>>,
|
||||||
ignore_non_fatal: bool,
|
ignore_non_fatal: bool,
|
||||||
@ -860,3 +861,23 @@ pub fn btree_to_map_with_sm<V: Unpack + Clone>(
|
|||||||
}
|
}
|
||||||
|
|
||||||
//------------------------------------------
|
//------------------------------------------
|
||||||
|
|
||||||
|
/*
|
||||||
|
struct ValuePathCollector<V> {
|
||||||
|
values: Mutex<BTreeMap<u64, (Vec<u64>, V)>>
|
||||||
|
}
|
||||||
|
|
||||||
|
impl<V> ValuePathCollector<V> {
|
||||||
|
fn new() -> ValuePathCollector<V> {
|
||||||
|
ValuePathCollector {
|
||||||
|
values: Mutex::new(BTreeMap::new()),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl<V: Unpack + Clone> NodeVisitor<V> for ValueCollector<V> {
|
||||||
|
|
||||||
|
}
|
||||||
|
*/
|
||||||
|
|
||||||
|
//------------------------------------------
|
||||||
|
@ -49,7 +49,7 @@ impl Unpack for SMRoot {
|
|||||||
|
|
||||||
//------------------------------------------
|
//------------------------------------------
|
||||||
|
|
||||||
#[derive(Clone, Debug)]
|
#[derive(Clone, Copy, Debug)]
|
||||||
pub struct IndexEntry {
|
pub struct IndexEntry {
|
||||||
pub blocknr: u64,
|
pub blocknr: u64,
|
||||||
pub nr_free: u32,
|
pub nr_free: u32,
|
||||||
|
@ -14,35 +14,10 @@ use crate::pdata::space_map::*;
|
|||||||
use crate::pdata::unpack::*;
|
use crate::pdata::unpack::*;
|
||||||
use crate::report::*;
|
use crate::report::*;
|
||||||
use crate::thin::superblock::*;
|
use crate::thin::superblock::*;
|
||||||
|
use crate::thin::block_time::*;
|
||||||
|
|
||||||
//------------------------------------------
|
//------------------------------------------
|
||||||
|
|
||||||
#[allow(dead_code)]
|
|
||||||
struct BlockTime {
|
|
||||||
block: u64,
|
|
||||||
time: u32,
|
|
||||||
}
|
|
||||||
|
|
||||||
impl Unpack for BlockTime {
|
|
||||||
fn disk_size() -> u32 {
|
|
||||||
8
|
|
||||||
}
|
|
||||||
|
|
||||||
fn unpack(i: &[u8]) -> IResult<&[u8], BlockTime> {
|
|
||||||
let (i, n) = le_u64(i)?;
|
|
||||||
let block = n >> 24;
|
|
||||||
let time = n & ((1 << 24) - 1);
|
|
||||||
|
|
||||||
Ok((
|
|
||||||
i,
|
|
||||||
BlockTime {
|
|
||||||
block,
|
|
||||||
time: time as u32,
|
|
||||||
},
|
|
||||||
))
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
struct BottomLevelVisitor {
|
struct BottomLevelVisitor {
|
||||||
data_sm: ASpaceMap,
|
data_sm: ASpaceMap,
|
||||||
}
|
}
|
||||||
@ -80,7 +55,7 @@ impl NodeVisitor<BlockTime> for BottomLevelVisitor {
|
|||||||
|
|
||||||
//------------------------------------------
|
//------------------------------------------
|
||||||
|
|
||||||
#[derive(Clone)]
|
#[derive(Clone, Copy)]
|
||||||
struct DeviceDetail {
|
struct DeviceDetail {
|
||||||
mapped_blocks: u64,
|
mapped_blocks: u64,
|
||||||
transaction_id: u64,
|
transaction_id: u64,
|
||||||
|
Loading…
Reference in New Issue
Block a user