formalized unnecessary copying

main
Ziyang Hu 2 years ago
parent 0f397e2873
commit b1ea7240e1

@ -188,25 +188,28 @@ impl InMemRelation {
let epoch_map: &RefCell<BTreeMap<_, _>> = epoch_map.borrow(); let epoch_map: &RefCell<BTreeMap<_, _>> = epoch_map.borrow();
let epoch_map = epoch_map.borrow(); let epoch_map = epoch_map.borrow();
// FIXME let collected = epoch_map
epoch_map.clone().into_iter().map(|(k, v)| { .iter()
if v.0.is_empty() { .map(|(k, v)| {
Ok(k) if v.0.is_empty() {
} else { k.clone()
let combined = } else {
k.0.into_iter() let combined =
.zip(v.0.into_iter()) k.0.iter()
.map(|(kel, vel)| { .zip(v.0.iter())
if matches!(kel, DataValue::Guard) { .map(|(kel, vel)| {
vel if matches!(kel, DataValue::Guard) {
} else { vel.clone()
kel } else {
} kel.clone()
}) }
.collect_vec(); })
Ok(Tuple(combined)) .collect_vec();
} Tuple(combined)
}) }
})
.collect_vec();
collected.into_iter().map(Ok)
} }
pub(crate) fn scan_all<'a>(&'a self) -> impl Iterator<Item = Result<Tuple>> + 'a { pub(crate) fn scan_all<'a>(&'a self) -> impl Iterator<Item = Result<Tuple>> + 'a {
self.scan_all_for_epoch(0) self.scan_all_for_epoch(0)
@ -218,27 +221,30 @@ impl InMemRelation {
let epoch_map: &RefCell<BTreeMap<_, _>> = epoch_map.borrow(); let epoch_map: &RefCell<BTreeMap<_, _>> = epoch_map.borrow();
let epoch_map = epoch_map.borrow(); let epoch_map = epoch_map.borrow();
// FIXME let collected = epoch_map
epoch_map.clone().into_iter().filter_map(|(k, v)| { .iter()
if v.0.is_empty() { .filter_map(|(k, v)| {
Some(Ok(k)) if v.0.is_empty() {
} else if v.0.last() == Some(&DataValue::Guard) { Some(k.clone())
None } else if v.0.last() == Some(&DataValue::Guard) {
} else { None
let combined = } else {
k.0.iter() let combined =
.zip(v.0.iter()) k.0.iter()
.map(|(kel, vel)| { .zip(v.0.iter())
if matches!(kel, DataValue::Guard) { .map(|(kel, vel)| {
vel.clone() if matches!(kel, DataValue::Guard) {
} else { vel.clone()
kel.clone() } else {
} kel.clone()
}) }
.collect_vec(); })
Some(Ok(Tuple(combined))) .collect_vec();
} Some(Tuple(combined))
}) }
})
.collect_vec();
collected.into_iter().map(Ok)
} }
pub(crate) fn scan_prefix(&self, prefix: &Tuple) -> impl Iterator<Item = Result<Tuple>> { pub(crate) fn scan_prefix(&self, prefix: &Tuple) -> impl Iterator<Item = Result<Tuple>> {
self.scan_prefix_for_epoch(prefix, 0) self.scan_prefix_for_epoch(prefix, 0)
@ -257,11 +263,11 @@ impl InMemRelation {
let epoch_map: &RefCell<BTreeMap<_, _>> = epoch_map.borrow(); let epoch_map: &RefCell<BTreeMap<_, _>> = epoch_map.borrow();
let epoch_map = epoch_map.borrow(); let epoch_map = epoch_map.borrow();
let res = epoch_map let collected = epoch_map
.range((Included(prefix), Included(&upper))) .range((Included(prefix), Included(&upper)))
.map(|(k, v)| { .map(|(k, v)| {
if v.0.is_empty() { if v.0.is_empty() {
Ok(k.clone()) k.clone()
} else { } else {
let combined = let combined =
k.0.iter() k.0.iter()
@ -274,11 +280,11 @@ impl InMemRelation {
} }
}) })
.collect_vec(); .collect_vec();
Ok(Tuple(combined)) Tuple(combined)
} }
}) })
.collect_vec(); .collect_vec();
res.into_iter() collected.into_iter().map(Ok)
} }
pub(crate) fn scan_bounded_prefix_for_epoch( pub(crate) fn scan_bounded_prefix_for_epoch(
&self, &self,
@ -300,8 +306,8 @@ impl InMemRelation {
let res = epoch_map let res = epoch_map
.range((Included(&prefix_bound), Included(&upper_bound))) .range((Included(&prefix_bound), Included(&upper_bound)))
.map(|(k, _v)| Ok(k.clone())) .map(|(k, _v)| k.clone())
.collect_vec(); .collect_vec();
res.into_iter() res.into_iter().map(Ok)
} }
} }

Loading…
Cancel
Save