poly2tri_rs/
context.rs

1use crate::{
2    advancing_front::AdvancingFront, points::Points, triangles::TriangleStore, TriangleId,
3};
4
5pub struct Context<'a> {
6    pub points: &'a Points,
7    pub triangles: &'a mut TriangleStore,
8    pub advancing_front: &'a mut AdvancingFront,
9    pub result: Vec<TriangleId>,
10
11    // reusable legalize task queue to reduce alloc overhead
12    pub(crate) legalize_task_queue: Vec<TriangleId>,
13    // reusable legalize remap triangle ids to reduce alloc overhead
14    pub(crate) legalize_remap_tids: Vec<TriangleId>,
15    // reusable legalize triangle id queue
16    pub(crate) triangle_id_queue: Vec<TriangleId>,
17}
18
19impl<'a> Context<'a> {
20    pub fn new(
21        points: &'a Points,
22        triangles: &'a mut TriangleStore,
23        advancing_front: &'a mut AdvancingFront,
24    ) -> Self {
25        Self {
26            points,
27            triangles,
28            advancing_front,
29            result: Vec::with_capacity(points.len()),
30
31            legalize_task_queue: Vec::with_capacity(32),
32            legalize_remap_tids: Vec::with_capacity(32),
33            triangle_id_queue: Vec::with_capacity(32),
34        }
35    }
36}