Add -I and -c cli options

This commit is contained in:
Joscha 2024-12-31 16:41:19 +01:00
parent 04482f9f2f
commit e90864a097
2 changed files with 38 additions and 0 deletions

View file

@ -72,3 +72,26 @@ pub fn resolve_redirects(data: &mut Data) {
} }
} }
} }
pub fn invert(data: &mut Data) {
let links = mem::take(&mut data.links);
let graph = mem::take(&mut data.graph);
let mut edges = graph
.edges()
.zip(links)
.map(|((source, target), link)| (source, target, link))
.collect::<Vec<_>>();
edges.sort_by_key(|(_, target, _)| *target);
let mut edges = edges.into_iter().peekable();
for node in graph.nodes() {
data.graph.add_node();
while edges.peek().is_some_and(|(_, target, _)| *target <= node) {
let (source, _, link) = edges.next().unwrap();
data.graph.add_edge(source);
data.links.push(link);
}
}
}

View file

@ -28,6 +28,10 @@ struct Args {
in_structure: Option<bool>, in_structure: Option<bool>,
#[arg(long, short = 'R')] #[arg(long, short = 'R')]
resolve_redirects: bool, resolve_redirects: bool,
#[arg(long, short = 'I')]
invert_edges: bool,
#[arg(long, short)]
check_consistency: bool,
} }
fn main() -> io::Result<()> { fn main() -> io::Result<()> {
@ -38,6 +42,7 @@ fn main() -> io::Result<()> {
} }
println!(">> Import"); println!(">> Import");
println!("> Reading data");
let mut data = Data::read_from_file(&args.datafile)?; let mut data = Data::read_from_file(&args.datafile)?;
if args.in_parens.is_some() || args.in_structure.is_some() { if args.in_parens.is_some() || args.in_structure.is_some() {
@ -53,6 +58,16 @@ fn main() -> io::Result<()> {
algo::resolve_redirects(&mut data); algo::resolve_redirects(&mut data);
} }
if args.invert_edges {
println!("> Inverting edges");
algo::invert(&mut data);
}
if args.check_consistency {
println!("> Checking consistencey");
data.check_consistency();
}
match args.command { match args.command {
Command::Ingest(_) => unreachable!(), Command::Ingest(_) => unreachable!(),
Command::Export(cmd) => cmd.run(data), Command::Export(cmd) => cmd.run(data),