dot, pt done.

This commit is contained in:
Gregory Burd 2024-03-23 21:01:39 -04:00
parent eea1be7031
commit 8198714190

View file

@ -1425,18 +1425,15 @@
/* -- __skip_dot_node_ \ /* -- __skip_dot_node_ \
* Writes out a fragment of a DOT file representing a node. \ * Writes out a fragment of a DOT file representing a node. \
*/ \ */ \
static size_t __skip_dot_width_##decl(decl##_t *slist, decl##_node_t *node, size_t level) \ static size_t __skip_dot_width_##decl(decl##_t *slist, decl##_node_t *from, decl##_node_t *to) \
{ \ { \
size_t w = 1; \ size_t w = 1; \
decl##_node_t *n; \ decl##_node_t *n = to; \
\ \
if (node == slist->slh_tail) \ if (from == NULL || to == NULL) \
return 0; \ return 0; \
if (node == NULL) \
node = slist->slh_tail; \
\ \
n = node->field.sle.next[level] == slist->slh_tail ? NULL : node->field.sle.next[level]; \ while (n->field.sle.prev != from) { \
while (n && n->field.sle.prev != node) { \
w++; \ w++; \
n = prefix##skip_prev_node_##decl(slist, n); \ n = prefix##skip_prev_node_##decl(slist, n); \
} \ } \
@ -1467,7 +1464,7 @@
__SKIP_NEXT_ENTRIES_T2B(field, node) \ __SKIP_NEXT_ENTRIES_T2B(field, node) \
{ \ { \
next = (node->field.sle.next[lvl] == slist->slh_tail) ? NULL : node->field.sle.next[lvl]; \ next = (node->field.sle.next[lvl] == slist->slh_tail) ? NULL : node->field.sle.next[lvl]; \
width = __skip_dot_width_##decl(slist, (next == NULL ? node : next), lvl); \ width = __skip_dot_width_##decl(slist, node, next ? next : slist->slh_tail); \
fprintf(os, " { <w%zu> %zu | <f%zu> ", lvl, width, lvl); \ fprintf(os, " { <w%zu> %zu | <f%zu> ", lvl, width, lvl); \
if (next) \ if (next) \
fprintf(os, "%p } |", (void *)next); \ fprintf(os, "%p } |", (void *)next); \
@ -1542,7 +1539,7 @@
int prefix##skip_dot_##decl(FILE *os, decl##_t *slist, size_t nsg, skip_sprintf_node_##decl##_t fn) \ int prefix##skip_dot_##decl(FILE *os, decl##_t *slist, size_t nsg, skip_sprintf_node_##decl##_t fn) \
{ \ { \
int letitgo = 0; \ int letitgo = 0; \
size_t width = 0, i; \ size_t width, i; \
decl##_node_t *node, *next; \ decl##_node_t *node, *next; \
\ \
if (slist == NULL || fn == NULL) \ if (slist == NULL || fn == NULL) \
@ -1573,10 +1570,7 @@
__SKIP_NEXT_ENTRIES_T2B(field, node) \ __SKIP_NEXT_ENTRIES_T2B(field, node) \
{ \ { \
next = (node->field.sle.next[lvl] == slist->slh_tail) ? NULL : node->field.sle.next[lvl]; \ next = (node->field.sle.next[lvl] == slist->slh_tail) ? NULL : node->field.sle.next[lvl]; \
if (next) \ width = __skip_dot_width_##decl(slist, node, next ? next : slist->slh_tail); \
width = __skip_dot_width_##decl(slist, (next == NULL ? node : next), lvl); \
else \
width = __skip_dot_width_##decl(slist, node, lvl); \
fprintf(os, "{ %zu | <f%zu> ", width, lvl); \ fprintf(os, "{ %zu | <f%zu> ", width, lvl); \
if (next) \ if (next) \
fprintf(os, "%p }", (void *)next); \ fprintf(os, "%p }", (void *)next); \