Skip to content
Snippets Groups Projects

Enhancements for xdot

Merged rarbore2 requested to merge xdot_enhance into main
1 file
+ 31
50
Compare changes
  • Side-by-side
  • Inline
+ 31
50
use std::collections::HashMap;
use std::collections::{HashMap, HashSet};
use std::env::temp_dir;
use std::fmt::Write;
use std::fs::File;
@@ -93,7 +93,9 @@ pub fn write_dot<W: Write>(
color,
module,
typing,
&function.labels[node_id.idx()],
&function.schedules[node_id.idx()],
&module.labels,
w,
)?;
}
@@ -254,7 +256,9 @@ fn write_node<W: Write>(
color: &str,
module: &Module,
typing: Option<&ModuleTyping>,
label_set: &HashSet<LabelID>,
schedules: &Vec<Schedule>,
labels: &Vec<String>,
w: &mut W,
) -> std::fmt::Result {
let node = &module.functions[function_id.idx()].nodes[node_id.idx()];
@@ -341,62 +345,39 @@ fn write_node<W: Write>(
if let Some(ty) = typing.map(|typing| typing[function_id.idx()][node_id.idx()]) {
module.write_type(ty, &mut tylabel)?;
}
let mut iter = label_set.into_iter();
let label_set = if let Some(first) = iter.next() {
iter.fold(format!("{}", labels[first.idx()]), |b, i| {
format!("{}, {}", b, labels[i.idx()])
})
} else {
String::new()
};
let mut iter = schedules.into_iter();
let schedules = if let Some(first) = iter.next() {
iter.fold(format!("{:?}", first), |b, i| format!("{}, {:?}", b, i))
} else {
String::new()
};
if tylabel.is_empty() && schedules.is_empty() {
write!(
w,
"{}_{}_{} [xlabel={}, label=<{}>, color={}];\n",
node.lower_case_name(),
function_id.idx(),
node_id.idx(),
xlabel,
label,
color
)?;
} else if schedules.is_empty() {
write!(
w,
"{}_{}_{} [xlabel={}, label=<{}<BR /><FONT POINT-SIZE=\"8\">{}</FONT>>, color={}];\n",
node.lower_case_name(),
function_id.idx(),
node_id.idx(),
xlabel,
label,
tylabel,
color
)?;
} else if tylabel.is_empty() {
write!(
w,
"{}_{}_{} [xlabel={}, label=<{}<BR /><FONT POINT-SIZE=\"8\">{}</FONT>>, color={}];\n",
node.lower_case_name(),
function_id.idx(),
node_id.idx(),
xlabel,
label,
schedules,
color
)?;
} else {
write!(
w,
"{}_{}_{} [xlabel={}, label=<{}<BR /><FONT POINT-SIZE=\"8\">{}</FONT><BR /><FONT POINT-SIZE=\"8\">{}</FONT>>, color={}];\n",
node.lower_case_name(),
function_id.idx(),
node_id.idx(),
xlabel,
label,
tylabel,
schedules,
color
)?;
write!(
w,
"{}_{}_{} [xlabel={}, label=<{}",
node.lower_case_name(),
function_id.idx(),
node_id.idx(),
xlabel,
label,
)?;
if !tylabel.is_empty() {
write!(w, "<BR /><FONT POINT-SIZE=\"8\">{}</FONT>", tylabel,)?;
}
if !label_set.is_empty() {
write!(w, "<BR /><FONT POINT-SIZE=\"8\">{}</FONT>", label_set,)?;
}
if !schedules.is_empty() {
write!(w, "<BR /><FONT POINT-SIZE=\"8\">{}</FONT>", schedules,)?;
}
write!(w, ">, color={}];\n", color)?;
Ok(())
}
Loading