mirror of
https://github.com/sxyazi/yazi.git
synced 2026-07-25 08:41:05 +00:00
Avoid parent_url() allocating a new Url to optimize the performance of add_many method
This commit is contained in:
parent
dd1af25846
commit
5f6a364433
1 changed files with 13 additions and 18 deletions
|
|
@ -48,36 +48,31 @@ impl Selected {
|
||||||
/// # Examples
|
/// # Examples
|
||||||
///
|
///
|
||||||
/// ```
|
/// ```
|
||||||
/// #
|
/// let mut s = Selected::default();
|
||||||
/// # use yazi_core::select::Select;
|
///
|
||||||
/// # use yazi_shared::fs::Url;
|
|
||||||
/// let mut selected= Select::default();
|
|
||||||
/// let url1 = Url::from("/a/b/c");
|
/// let url1 = Url::from("/a/b/c");
|
||||||
/// let url2 = Url::from("/a/b/d");
|
/// let url2 = Url::from("/a/b/d");
|
||||||
/// let urls = vec![&url1, &url2];
|
/// assert!(selected.add_many(&[&url1, &url2]));
|
||||||
///
|
|
||||||
/// assert!(selected.add_many(&urls));
|
|
||||||
/// ```
|
/// ```
|
||||||
pub fn add_many(&mut self, urls: &[&Url]) -> bool {
|
pub fn add_many(&mut self, urls: &[&Url]) -> bool {
|
||||||
if urls.is_empty() {
|
if urls.is_empty() {
|
||||||
return true;
|
return true;
|
||||||
|
} else if self.parents.contains_key(urls[0]) {
|
||||||
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
let mut parent = urls[0].parent_url();
|
let mut parent = urls[0].parent_url();
|
||||||
|
let mut parents = vec![];
|
||||||
while let Some(u) = parent {
|
while let Some(u) = parent {
|
||||||
if self.inner.contains(&u) {
|
if self.inner.contains(&u) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
parent = u.parent_url();
|
parent = u.parent_url();
|
||||||
|
parents.push(u);
|
||||||
}
|
}
|
||||||
|
|
||||||
if self.parents.contains_key(urls[0]) {
|
for u in parents {
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
let mut parent = urls[0].parent_url();
|
|
||||||
while let Some(u) = parent {
|
|
||||||
parent = u.parent_url();
|
|
||||||
*self.parents.entry(u).or_insert(0) += urls.len();
|
*self.parents.entry(u).or_insert(0) += urls.len();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue