networkit-rs 0.1.0

Rust bindings for Networkit
Documentation
use cxx::UniquePtr;
use miette::IntoDiagnostic;

use crate::{
    base::Algorithm,
    bridge::{self, *},
};

pub struct MaximalCliques {
    inner: UniquePtr<bridge::MaximalCliques>,
}

impl MaximalCliques {
    pub fn new(g: &crate::Graph, maximum_only: bool) -> Self {
        Self {
            inner: NewMaximalCliques(g, maximum_only),
        }
    }
    pub fn get_cliques(&mut self) -> impl Iterator<Item = (u64, u64)> {
        let mut cliques = vec![];
        let mut nodes = vec![];
        MaximalCliquesGetCliques(self.inner.pin_mut(), &mut cliques, &mut nodes);
        cliques.into_iter().zip(nodes.into_iter())
    }
}

impl Algorithm for MaximalCliques {
    fn run(&mut self) -> miette::Result<()> {
        self.inner.pin_mut().run().into_diagnostic()
    }

    fn has_finished(&self) -> bool {
        self.inner.hasFinished()
    }
}