Compare commits
3 Commits
8358570414
...
27a15a5d07
| Author | SHA1 | Date | |
|---|---|---|---|
| 27a15a5d07 | |||
| 2b89a4169b | |||
| 5b5d3a9b64 |
@@ -19,6 +19,6 @@ license = "MIT"
|
||||
include = ["Cargo.toml", "README.md", "LICENSE", "ACKNOWLEDGEMENTS", "src/**/*.rs"]
|
||||
|
||||
[dependencies]
|
||||
ironsea_index = "^0.1"
|
||||
ironsea_index = "0.1"
|
||||
|
||||
serde = { version = "^1.0", features = ["derive"] }
|
||||
serde = { version = "1.0", features = ["derive"] }
|
||||
|
||||
@@ -67,7 +67,7 @@ where
|
||||
/// If the key is not found, return the index where it should be
|
||||
/// inserted.
|
||||
fn index(&self, key: &K) -> usize {
|
||||
match self.keys.binary_search(&key) {
|
||||
match self.keys.binary_search(key) {
|
||||
Ok(i) => i,
|
||||
Err(i) => {
|
||||
if i >= self.keys.len() {
|
||||
@@ -84,29 +84,23 @@ impl<F, K> IndexedDestructured<F, K> for Index<F, K>
|
||||
where
|
||||
K: Clone + Eq + Hash + PartialEq + Ord,
|
||||
{
|
||||
fn find(&self, key: &K) -> Vec<&F> {
|
||||
fn find<'i>(&'i self, key: &K) -> Box<dyn Iterator<Item = &F> + '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<dyn Iterator<Item = (K, &F)> + 'i> {
|
||||
let start = self.index(start);
|
||||
let end = self.index(end);
|
||||
|
||||
(start..end)
|
||||
.filter_map(|i| {
|
||||
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
|
||||
}
|
||||
})
|
||||
.collect()
|
||||
self.hashmap.get(key).map(|fields| (key.clone(), fields))
|
||||
}))
|
||||
}
|
||||
}
|
||||
|
||||
@@ -85,22 +85,23 @@ where
|
||||
R: Record<K>,
|
||||
K: Clone + Eq + Hash + PartialEq + Ord,
|
||||
{
|
||||
fn find(&self, key: &K) -> Vec<&R> {
|
||||
fn find<'i>(&'i self, key: &K) -> Box<dyn Iterator<Item = &R> + '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<dyn Iterator<Item = &R> + '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)
|
||||
}))
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user