Skip to content

Commit a9fa350

Browse files
authored
Removing unnecessary allocations (#83)
* Removing unnecessary allocations * Removing more allocations
1 parent 313339b commit a9fa350

File tree

3 files changed

+13
-25
lines changed

3 files changed

+13
-25
lines changed

src/input/triangulation.rs

Lines changed: 12 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -132,14 +132,13 @@ impl Triangulation {
132132
}
133133

134134
/// Add an obstacle delimited by the list of points on its edges.
135-
pub fn add_obstacle(&mut self, edges: Vec<Vec2>) {
136-
self.inner.interiors_push(LineString::from(
137-
edges.iter().map(|v| (v.x, v.y)).collect::<Vec<_>>(),
138-
));
135+
pub fn add_obstacle(&mut self, edges: impl IntoIterator<Item = Vec2>) {
136+
self.inner
137+
.interiors_push(LineString::from_iter(edges.into_iter().map(|v| (v.x, v.y))));
139138
}
140139

141140
/// Add obstacles delimited by the list of points on their edges.
142-
pub fn add_obstacles(&mut self, obstacles: impl IntoIterator<Item = Vec<Vec2>>) {
141+
pub fn add_obstacles(&mut self, obstacles: impl IntoIterator<Item = impl IntoIterator<Item = Vec2>>) {
143142
let (exterior, interiors) =
144143
std::mem::replace(&mut self.inner, GeoPolygon::new(LineString(vec![]), vec![]))
145144
.into_inner();
@@ -148,12 +147,7 @@ impl Triangulation {
148147
interiors
149148
.into_iter()
150149
.chain(obstacles.into_iter().map(|edges| {
151-
LineString(
152-
edges
153-
.iter()
154-
.map(|v| Coord::from((v.x, v.y)))
155-
.collect::<Vec<_>>(),
156-
)
150+
LineString::from_iter(edges.into_iter().map(|v| Coord::from((v.x, v.y))))
157151
}))
158152
.collect::<Vec<_>>(),
159153
);
@@ -728,17 +722,13 @@ mod inflate {
728722

729723
fn round_line(line: &Line<f32>, distance: f32, arc_segments: u32) -> LineString<f32> {
730724
let Some(normal) = segment_normal(&line.start, &line.end) else {
731-
return LineString::new(
732-
(0..(arc_segments * 2))
733-
.map(|i| {
734-
let angle = i as f32 * TAU / (arc_segments * 2) as f32;
735-
Coord {
736-
x: line.start.x + angle.cos() * distance,
737-
y: line.start.y + angle.sin() * distance,
738-
}
739-
})
740-
.collect(),
741-
);
725+
return LineString::from_iter((0..(arc_segments * 2)).map(|i| {
726+
let angle = i as f32 * TAU / (arc_segments * 2) as f32;
727+
Coord {
728+
x: line.start.x + angle.cos() * distance,
729+
y: line.start.y + angle.sin() * distance,
730+
}
731+
}));
742732
};
743733
let mut vertices = Vec::with_capacity((arc_segments as usize + 2) * 2);
744734

src/stitching.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -727,7 +727,7 @@ mod tests {
727727
] {
728728
triangulation_a.add_obstacle(obstacle.clone());
729729
triangulation_b
730-
.add_obstacle(obstacle.into_iter().map(|v| v - vec2(1.0, 0.0)).collect());
730+
.add_obstacle(obstacle.into_iter().map(|v| v - vec2(1.0, 0.0)));
731731
}
732732
let mut mesh = Mesh::default();
733733
let mut layer_a = triangulation_a.as_layer();

tests/triangulation.rs

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -180,7 +180,6 @@ fn is_in_mesh_simplified() {
180180
let (x, y) = angle.sin_cos();
181181
vec2(x, y) * radius + vec2(5.0, 5.0)
182182
})
183-
.collect(),
184183
);
185184
let polygons_before = triangulation.as_navmesh().layers[0].polygons.clone();
186185
triangulation.simplify(0.1);
@@ -216,7 +215,6 @@ fn is_in_mesh_overlapping_simplified() {
216215
let (x, y) = angle.sin_cos();
217216
vec2(x, y) * radius + vec2(5.0, 5.0)
218217
})
219-
.collect(),
220218
);
221219
triangulation.add_obstacle(vec![
222220
vec2(2.5, 2.5),

0 commit comments

Comments
 (0)