rapx/analysis/opt/data_collection/
suboptimal.rs1pub mod participant;
2pub mod slice_contains;
3pub mod vec_remove;
4
5use participant::ParticipantCheck;
6use slice_contains::SliceContainsCheck;
7use vec_remove::VecRemoveCheck;
8
9use crate::analysis::core::dataflow::graph::Graph;
10use crate::analysis::opt::OptCheck;
11
12use rustc_middle::ty::TyCtxt;
13
14use super::super::LEVEL;
15
16pub struct SuboptimalCheck {
17 participant: ParticipantCheck,
18 slice_contains: SliceContainsCheck,
19 vec_remove: VecRemoveCheck,
20}
21
22impl OptCheck for SuboptimalCheck {
23 fn new() -> Self {
24 Self {
25 participant: ParticipantCheck::new(),
26 slice_contains: SliceContainsCheck::new(),
27 vec_remove: VecRemoveCheck::new(),
28 }
29 }
30
31 fn check(&mut self, graph: &Graph, tcx: &TyCtxt) {
32 self.vec_remove.check(graph, tcx);
33 let level = LEVEL.lock().unwrap();
34 if *level == 2 {
35 self.participant.check(graph, tcx);
36 self.slice_contains.check(graph, tcx);
37 }
38 }
39
40 fn report(&self, graph: &Graph) {
41 self.participant.report(graph);
42 self.slice_contains.report(graph);
43 self.vec_remove.report(graph);
44 }
45
46 fn cnt(&self) -> usize {
47 self.participant.cnt() + self.slice_contains.cnt() + self.vec_remove.cnt()
48 }
49}