Skip to content

Commit 61617ea

Browse files
committed
perf: current_data.get_unchecked
1 parent ecf2f30 commit 61617ea

File tree

1 file changed

+30
-23
lines changed

1 file changed

+30
-23
lines changed

src/decoder.rs

Lines changed: 30 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -58,41 +58,45 @@ impl<'a> MappingsDecoder<'a> {
5858
impl Iterator for MappingsDecoder<'_> {
5959
type Item = Mapping;
6060

61+
#[allow(unsafe_code)]
6162
fn next(&mut self) -> Option<Self::Item> {
6263
for c in &mut self.mappings_iter {
63-
let value = B64[*c as usize];
64+
let value = unsafe { *B64.get_unchecked(*c as usize) };
6465
if value == ERR {
6566
continue;
6667
}
6768
if (value & COM) != 0 {
69+
#[allow(unsafe_code)]
6870
let mut mapping = Mapping {
6971
generated_line: self.generated_line,
70-
generated_column: self.current_data[0],
72+
generated_column: unsafe { *self.current_data.get_unchecked(0) },
7173
original: None,
7274
};
7375
let current_data_pos = self.current_data_pos;
7476
self.current_data_pos = 0;
7577
if value == SEM {
7678
self.generated_line += 1;
77-
self.current_data[0] = 0;
79+
unsafe {
80+
*self.current_data.get_unchecked_mut(0) = 0
81+
};
7882
}
7983
match current_data_pos {
8084
1 => return Some(mapping),
8185
4 => {
8286
mapping.original = Some(OriginalLocation {
83-
source_index: self.current_data[1],
84-
original_line: self.current_data[2],
85-
original_column: self.current_data[3],
87+
source_index: unsafe { *self.current_data.get_unchecked(1) },
88+
original_line: unsafe { *self.current_data.get_unchecked(2) },
89+
original_column: unsafe { *self.current_data.get_unchecked(3) },
8690
name_index: None,
8791
});
8892
return Some(mapping);
8993
}
9094
5 => {
9195
mapping.original = Some(OriginalLocation {
92-
source_index: self.current_data[1],
93-
original_line: self.current_data[2],
94-
original_column: self.current_data[3],
95-
name_index: Some(self.current_data[4]),
96+
source_index: unsafe { *self.current_data.get_unchecked(1) },
97+
original_line: unsafe { *self.current_data.get_unchecked(2) },
98+
original_column: unsafe { *self.current_data.get_unchecked(3) },
99+
name_index: Some(unsafe { *self.current_data.get_unchecked(4) }),
96100
});
97101
return Some(mapping);
98102
}
@@ -107,9 +111,12 @@ impl Iterator for MappingsDecoder<'_> {
107111
self.current_value >> 1
108112
};
109113
if self.current_data_pos < 5 {
110-
self.current_data[self.current_data_pos] =
111-
(self.current_data[self.current_data_pos] as i64 + final_value)
112-
as u32;
114+
#[allow(unsafe_code)]
115+
unsafe {
116+
*self.current_data.get_unchecked_mut(self.current_data_pos) =
117+
(*self.current_data.get_unchecked(self.current_data_pos) as i64 + final_value)
118+
as u32
119+
}
113120
}
114121
self.current_data_pos += 1;
115122
self.current_value_pos = 0;
@@ -128,31 +135,31 @@ impl Iterator for MappingsDecoder<'_> {
128135
1 => {
129136
return Some(Mapping {
130137
generated_line: self.generated_line,
131-
generated_column: self.current_data[0],
138+
generated_column: unsafe { *self.current_data.get_unchecked(0) },
132139
original: None,
133140
})
134141
}
135142
4 => {
136143
return Some(Mapping {
137144
generated_line: self.generated_line,
138-
generated_column: self.current_data[0],
145+
generated_column: unsafe { *self.current_data.get_unchecked(0) },
139146
original: Some(OriginalLocation {
140-
source_index: self.current_data[1],
141-
original_line: self.current_data[2],
142-
original_column: self.current_data[3],
147+
source_index: unsafe { *self.current_data.get_unchecked(1) },
148+
original_line: unsafe { *self.current_data.get_unchecked(2) },
149+
original_column: unsafe { *self.current_data.get_unchecked(3) },
143150
name_index: None,
144151
}),
145152
})
146153
}
147154
5 => {
148155
return Some(Mapping {
149156
generated_line: self.generated_line,
150-
generated_column: self.current_data[0],
157+
generated_column: unsafe { *self.current_data.get_unchecked(0) },
151158
original: Some(OriginalLocation {
152-
source_index: self.current_data[1],
153-
original_line: self.current_data[2],
154-
original_column: self.current_data[3],
155-
name_index: Some(self.current_data[4]),
159+
source_index: unsafe { *self.current_data.get_unchecked(1) },
160+
original_line: unsafe { *self.current_data.get_unchecked(2) },
161+
original_column: unsafe { *self.current_data.get_unchecked(3) },
162+
name_index: Some(unsafe { *self.current_data.get_unchecked(4) }),
156163
}),
157164
})
158165
}

0 commit comments

Comments
 (0)