1use cxx::UniquePtr;
2use miette::IntoDiagnostic;
3
4use crate::{
5 base::Algorithm,
6 bridge::{self, *},
7};
8
9pub struct MaximalCliques {
10 inner: UniquePtr<bridge::MaximalCliques>,
11}
12
13impl MaximalCliques {
14 pub fn new(g: &crate::Graph, maximum_only: bool) -> Self {
15 Self {
16 inner: NewMaximalCliques(g, maximum_only),
17 }
18 }
19 pub fn get_cliques(&mut self) -> impl Iterator<Item = (u64, u64)> {
20 let mut cliques = vec![];
21 let mut nodes = vec![];
22 MaximalCliquesGetCliques(self.inner.pin_mut(), &mut cliques, &mut nodes);
23 cliques.into_iter().zip(nodes.into_iter())
24 }
25}
26
27impl Algorithm for MaximalCliques {
28 fn run(&mut self) -> miette::Result<()> {
29 self.inner.pin_mut().run().into_diagnostic()
30 }
31
32 fn has_finished(&self) -> bool {
33 self.inner.hasFinished()
34 }
35}