Use slices directly instead of &Vec (#10328)

Simplifies the signature, makes it more flexible.
Detected a few unnecessary allocations in the process.
This commit is contained in:
Stefan Holderbach
2023-09-12 05:38:20 +02:00
committed by GitHub
parent 84c10de864
commit e90b099622
17 changed files with 48 additions and 46 deletions

View File

@ -343,10 +343,11 @@ impl EngineState {
where
'b: 'a,
{
self.scope
.active_overlays
.iter()
.filter(|id| !removed_overlays.contains(self.get_overlay_name(**id)))
self.scope.active_overlays.iter().filter(|id| {
!removed_overlays
.iter()
.any(|name| name == self.get_overlay_name(**id))
})
}
pub fn active_overlays<'a, 'b>(
@ -363,7 +364,7 @@ impl EngineState {
pub fn active_overlay_names<'a, 'b>(
&'b self,
removed_overlays: &'a [Vec<u8>],
) -> impl DoubleEndedIterator<Item = &Vec<u8>> + 'a
) -> impl DoubleEndedIterator<Item = &[u8]> + 'a
where
'b: 'a,
{
@ -389,7 +390,7 @@ impl EngineState {
.collect()
}
pub fn last_overlay_name(&self, removed_overlays: &[Vec<u8>]) -> &Vec<u8> {
pub fn last_overlay_name(&self, removed_overlays: &[Vec<u8>]) -> &[u8] {
self.active_overlay_names(removed_overlays)
.last()
.expect("internal error: no active overlays")
@ -402,7 +403,7 @@ impl EngineState {
.expect("internal error: no active overlays")
}
pub fn get_overlay_name(&self, overlay_id: OverlayId) -> &Vec<u8> {
pub fn get_overlay_name(&self, overlay_id: OverlayId) -> &[u8] {
&self
.scope
.overlays
@ -931,7 +932,7 @@ impl EngineState {
.unwrap_or_default()
}
pub fn get_file_contents(&self) -> &Vec<(Vec<u8>, usize, usize)> {
pub fn get_file_contents(&self) -> &[(Vec<u8>, usize, usize)] {
&self.file_contents
}
@ -1081,7 +1082,7 @@ impl StateDelta {
self.scope.pop();
}
pub fn get_file_contents(&self) -> &Vec<(Vec<u8>, usize, usize)> {
pub fn get_file_contents(&self) -> &[(Vec<u8>, usize, usize)] {
&self.file_contents
}
}
@ -1127,8 +1128,8 @@ impl<'a> StateWorkingSet<'a> {
self.delta.num_modules() + self.permanent_state.num_modules()
}
pub fn unique_overlay_names(&self) -> HashSet<&Vec<u8>> {
let mut names: HashSet<&Vec<u8>> = self.permanent_state.active_overlay_names(&[]).collect();
pub fn unique_overlay_names(&self) -> HashSet<&[u8]> {
let mut names: HashSet<&[u8]> = self.permanent_state.active_overlay_names(&[]).collect();
for scope_frame in self.delta.scope.iter().rev() {
for overlay_id in scope_frame.active_overlays.iter().rev() {
@ -1138,7 +1139,7 @@ impl<'a> StateWorkingSet<'a> {
.expect("internal error: missing overlay");
names.insert(overlay_name);
names.retain(|n| !scope_frame.removed_overlays.contains(n));
names.retain(|n| !scope_frame.removed_overlays.iter().any(|m| n == m));
}
}
@ -1820,7 +1821,7 @@ impl<'a> StateWorkingSet<'a> {
.map(|id| self.permanent_state.get_overlay(id))
}
pub fn last_overlay_name(&self) -> &Vec<u8> {
pub fn last_overlay_name(&self) -> &[u8] {
let mut removed_overlays = vec![];
for scope_frame in self.delta.scope.iter().rev() {

View File

@ -108,7 +108,11 @@ impl ScopeFrame {
self.active_overlays
.iter()
.filter(|id| !removed_overlays.contains(self.get_overlay_name(**id)))
.filter(|id| {
!removed_overlays
.iter()
.any(|name| name == self.get_overlay_name(**id))
})
.copied()
.collect()
}
@ -125,14 +129,14 @@ impl ScopeFrame {
.map(|id| self.get_overlay(id))
}
pub fn active_overlay_names(&self, removed_overlays: &mut Vec<Vec<u8>>) -> Vec<&Vec<u8>> {
pub fn active_overlay_names(&self, removed_overlays: &mut Vec<Vec<u8>>) -> Vec<&[u8]> {
self.active_overlay_ids(removed_overlays)
.iter()
.map(|id| self.get_overlay_name(*id))
.collect()
}
pub fn get_overlay_name(&self, overlay_id: OverlayId) -> &Vec<u8> {
pub fn get_overlay_name(&self, overlay_id: OverlayId) -> &[u8] {
&self
.overlays
.get(overlay_id)