networkit_rs/
clique.rs

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}