From 2b89a4169bef0066de5c77848c9408292edea841 Mon Sep 17 00:00:00 2001 From: Lionel Sambuc Date: Mon, 6 Jul 2020 09:16:19 +0200 Subject: [PATCH] Switch to iterators --- src/destructured.rs | 24 +++++++++++------------- src/full_record.rs | 13 +++++++------ 2 files changed, 18 insertions(+), 19 deletions(-) diff --git a/src/destructured.rs b/src/destructured.rs index 90b7955..11d6606 100644 --- a/src/destructured.rs +++ b/src/destructured.rs @@ -84,29 +84,27 @@ impl IndexedDestructured for Index where K: Clone + Eq + Hash + PartialEq + Ord, { - fn find(&self, key: &K) -> Vec<&F> { + fn find<'i>(&'i self, key: &K) -> Box + 'i> { let mut values = vec![]; if let Some(fields) = self.hashmap.get(key) { values.push(fields); } - values + Box::new(values.into_iter()) } - fn find_range(&self, start: &K, end: &K) -> Vec<(K, &F)> { + fn find_range<'i>(&'i self, start: &K, end: &K) -> Box + 'i> { let start = self.index(start); let end = self.index(end); - (start..end) - .filter_map(|i| { - let key = &self.keys[i]; - if let Some(fields) = self.hashmap.get(key) { - Some((key.clone(), fields)) - } else { - None - } - }) - .collect() + Box::new((start..=end).filter_map(move |i| { + let key = &self.keys[i]; + if let Some(fields) = self.hashmap.get(key) { + Some((key.clone(), fields)) + } else { + None + } + })) } } diff --git a/src/full_record.rs b/src/full_record.rs index 37f2287..cad8f59 100644 --- a/src/full_record.rs +++ b/src/full_record.rs @@ -85,22 +85,23 @@ where R: Record, K: Clone + Eq + Hash + PartialEq + Ord, { - fn find(&self, key: &K) -> Vec<&R> { + fn find<'i>(&'i self, key: &K) -> Box + 'i> { let mut values = vec![]; if let Some(record) = self.hashmap.get(key) { values.push(record); } - values + Box::new(values.into_iter()) } - fn find_range(&self, start: &K, end: &K) -> Vec<&R> { + fn find_range<'i>(&'i self, start: &K, end: &K) -> Box + 'i> { let start = self.index(start); let end = self.index(end); - (start..end) - .filter_map(|i| self.hashmap.get(&self.keys[i])) - .collect() + Box::new((start..=end).filter_map(move |i| { + let k = &self.keys[i]; + self.hashmap.get(k) + })) } }