icentral-alg 0.1.0

A Rust crate for incremental and parallel betweenness centrality algorithms.
Documentation
crate::ix!();

pub fn paper_exp_main<GH>() 
-> Result<(),BetweennessCentralityError>
where GH
: BccGraphHashInterface 
+ ClearMucs 
+ GetSigmaValueForNode
+ HasMapForNode
+ InsertNode
+ InsertEdgeUpdateMuc
+ IsValid
+ MappedNodes
+ NewFromCycleVec
+ NewFromGraphRef<Graph<GH>>
+ PairDependencyForNode
+ ParentsForNode
+ PathCountForNode
+ RemoveBridges
+ InitDebugIteration
+ RemoveEdge
+ ResetWith<GH>
+ HasEdge
+ SetPairDependencyForNode
+ SetSigmaValueForNode
+ CreateNamedEmpty
+ Debug
+ DebugIterationStep
+ GetNodeIdRange
+ ExtendWith<GH,Error=BetweennessCentralityError>
+ FindConnectedComponents<GH,Error=BetweennessCentralityError>
+ FindPruningCounts
+ FindSingleSourceShortestPaths
+ GetConnectedComponentSizes
+ GetNeighborsForNode
, Graph<GH>
: HasEdge
+ MappedNodes
+ GetLimitedNodeIdRange
{
    let mut args = std::env::args();

    let mut num_edges: usize = 0;
    let mut num_iter:  usize = 0;
    let mut rand_seed: i32 = 0;

    let mut t1:        i32 = 0;
    let mut t2:        i32 = 0;
    let mut t3:        i32 = 0;
    let mut t4:        i32 = 0;

    let mut do_inc_brandes: bool = false;
    let mut do_qube:        bool = false;
    let mut do_inc_qube:    bool = false;
    let mut do_fuad:        bool = false;

    let mut max_time_secs = 0;

    let mut path_vec: Vec<String> = vec![];

    if args.len() != 2 {

        debug!("Pass one parameter, path with experiment details");

        debug!("num_edges, num_iter, max_time, rand_seed");

        debug!("do_inc_brandes, do_qube, do_inc_qube, do_fuad");

        debug!("list of graph paths");

        return Ok(());

    } else {

        unsafe {

            let path = args.nth(1).unwrap();

            let mut fin = File::open(&path)
                .unwrap()
                .bytes()
                .map(|ch| ch.unwrap());

            text_io::scan!(fin => "{}, {}, {}, {}", num_edges, num_iter, max_time_secs, rand_seed);
            text_io::scan!(fin => "{}, {}, {}, {}", t1, t2 ,t3, t4);

            do_inc_brandes = (t1 != 0);
            do_qube        = (t2 != 0);
            do_inc_qube    = (t3 != 0);
            do_fuad        = (t4 != 0);

            while let Ok(path) = try_read!("{}", fin) {

                path_vec.push(path);
            }
        }
    }

    do_paper_exp::<GH>(
        num_edges, 
        Some(num_iter), 
        Duration::from_secs(max_time_secs), 
        rand_seed, 
        path_vec, 
        do_inc_brandes, 
        do_qube, 
        do_inc_qube, 
        do_fuad
    );

    Ok(())
}