Use a boxed slice for extras and groups (#12391)
## Summary A very common struct, and these are immutable. Easy to optimize.
This commit is contained in:
@@ -58,14 +58,9 @@ impl PubGrubDependency {
|
||||
} else {
|
||||
Either::Right(iter::empty())
|
||||
};
|
||||
let extras = requirement.extras.to_vec();
|
||||
Either::Left(Either::Left(
|
||||
base.chain(
|
||||
requirement
|
||||
.extras
|
||||
.clone()
|
||||
.into_iter()
|
||||
.map(|extra| (Some(extra), None)),
|
||||
),
|
||||
base.chain(extras.into_iter().map(|extra| (Some(extra), None))),
|
||||
))
|
||||
} else if !requirement.groups.is_empty() {
|
||||
let base = if requirement
|
||||
@@ -77,14 +72,9 @@ impl PubGrubDependency {
|
||||
} else {
|
||||
Either::Right(iter::empty())
|
||||
};
|
||||
let groups = requirement.groups.to_vec();
|
||||
Either::Left(Either::Right(
|
||||
base.chain(
|
||||
requirement
|
||||
.groups
|
||||
.clone()
|
||||
.into_iter()
|
||||
.map(|group| (None, Some(group))),
|
||||
),
|
||||
base.chain(groups.into_iter().map(|group| (None, Some(group)))),
|
||||
))
|
||||
} else {
|
||||
Either::Right(iter::once((None, None)))
|
||||
|
||||
@@ -1672,7 +1672,7 @@ impl<InstalledPackages: InstalledPackagesProvider> ResolverState<InstalledPackag
|
||||
);
|
||||
|
||||
requirements
|
||||
.flat_map(|requirement| {
|
||||
.flat_map(move |requirement| {
|
||||
PubGrubDependency::from_requirement(
|
||||
&self.conflicts,
|
||||
requirement,
|
||||
@@ -1952,7 +1952,7 @@ impl<InstalledPackages: InstalledPackagesProvider> ResolverState<InstalledPackag
|
||||
if name == Some(&req.name) && !req.source.is_empty() {
|
||||
self_constraints.push(Requirement {
|
||||
name: req.name.clone(),
|
||||
extras: vec![],
|
||||
extras: Box::new([]),
|
||||
groups: req.groups.clone(),
|
||||
source: req.source.clone(),
|
||||
origin: req.origin.clone(),
|
||||
|
||||
Reference in New Issue
Block a user