|  |  | @ -3044,30 +3044,39 @@ mtbdd_leaf_to_str(MTBDD leaf, char *buf, size_t buflen) | 
			
		
	
		
			
				
					|  |  |  |  */ | 
			
		
	
		
			
				
					|  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  | static void | 
			
		
	
		
			
				
					|  |  |  | mtbdd_fprintdot_rec(FILE *out, MTBDD mtbdd) | 
			
		
	
		
			
				
					|  |  |  | mtbdd_fprintdot_rec(FILE *out, MTBDD mtbdd, int *mtbdd_true_marked, int *mtbdd_false_marked) | 
			
		
	
		
			
				
					|  |  |  | { | 
			
		
	
		
			
				
					|  |  |  |     mtbddnode_t n = MTBDD_GETNODE(mtbdd); // also works for mtbdd_false | 
			
		
	
		
			
				
					|  |  |  |     if (mtbddnode_getmark(n)) return; | 
			
		
	
		
			
				
					|  |  |  |     mtbddnode_setmark(n, 1); | 
			
		
	
		
			
				
					|  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |     if (mtbdd == mtbdd_true || mtbdd == mtbdd_false) { | 
			
		
	
		
			
				
					|  |  |  |         fprintf(out, "0 [shape=box, style=filled, label=\"F\"];\n"); | 
			
		
	
		
			
				
					|  |  |  |     } else if (mtbddnode_isleaf(n)) { | 
			
		
	
		
			
				
					|  |  |  |         fprintf(out, "%" PRIu64 " [shape=box, style=filled, label=\"", MTBDD_STRIPMARK(mtbdd)); | 
			
		
	
		
			
				
					|  |  |  |         mtbdd_fprint_leaf(out, mtbdd); | 
			
		
	
		
			
				
					|  |  |  |         fprintf(out, "\"];\n"); | 
			
		
	
		
			
				
					|  |  |  |     if (mtbdd == mtbdd_true) { | 
			
		
	
		
			
				
					|  |  |  |         if (*mtbdd_true_marked) return; | 
			
		
	
		
			
				
					|  |  |  |         *mtbdd_true_marked = 1; | 
			
		
	
		
			
				
					|  |  |  |         fprintf(out, "%" PRIu64 " [shape=box, style=filled, label=\"T\"];\n", mtbdd); | 
			
		
	
		
			
				
					|  |  |  |     } else if (mtbdd == mtbdd_false) { | 
			
		
	
		
			
				
					|  |  |  |         if (*mtbdd_false_marked) return; | 
			
		
	
		
			
				
					|  |  |  |         *mtbdd_false_marked = 1; | 
			
		
	
		
			
				
					|  |  |  |         fprintf(out, "%" PRIu64 " [shape=box, style=filled, label=\"F\"];\n", mtbdd); | 
			
		
	
		
			
				
					|  |  |  |     } else { | 
			
		
	
		
			
				
					|  |  |  |         fprintf(out, "%" PRIu64 " [label=\"%" PRIu32 "\"];\n", | 
			
		
	
		
			
				
					|  |  |  |                 MTBDD_STRIPMARK(mtbdd), mtbddnode_getvariable(n)); | 
			
		
	
		
			
				
					|  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |         mtbdd_fprintdot_rec(out, mtbddnode_getlow(n)); | 
			
		
	
		
			
				
					|  |  |  |         mtbdd_fprintdot_rec(out, mtbddnode_gethigh(n)); | 
			
		
	
		
			
				
					|  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |         fprintf(out, "%" PRIu64 " -> %" PRIu64 " [style=dashed];\n", | 
			
		
	
		
			
				
					|  |  |  |                 MTBDD_STRIPMARK(mtbdd), mtbddnode_getlow(n)); | 
			
		
	
		
			
				
					|  |  |  |         fprintf(out, "%" PRIu64 " -> %" PRIu64 " [style=solid dir=both arrowtail=%s];\n", | 
			
		
	
		
			
				
					|  |  |  |                 MTBDD_STRIPMARK(mtbdd), MTBDD_STRIPMARK(mtbddnode_gethigh(n)), | 
			
		
	
		
			
				
					|  |  |  |                 mtbddnode_getcomp(n) ? "dot" : "none"); | 
			
		
	
		
			
				
					|  |  |  |         mtbddnode_t n = MTBDD_GETNODE(mtbdd); // also works for mtbdd_false | 
			
		
	
		
			
				
					|  |  |  |         if (mtbddnode_getmark(n)) return; | 
			
		
	
		
			
				
					|  |  |  |         mtbddnode_setmark(n, 1); | 
			
		
	
		
			
				
					|  |  |  |         if (mtbddnode_isleaf(n)) { | 
			
		
	
		
			
				
					|  |  |  |             fprintf(out, "%" PRIu64 " [shape=box, style=filled, label=\"", MTBDD_STRIPMARK(mtbdd)); | 
			
		
	
		
			
				
					|  |  |  |             mtbdd_fprint_leaf(out, mtbdd); | 
			
		
	
		
			
				
					|  |  |  |             fprintf(out, "\"];\n"); | 
			
		
	
		
			
				
					|  |  |  |         } else { | 
			
		
	
		
			
				
					|  |  |  |             fprintf(out, "%" PRIu64 " [label=\"%" PRIu32 "\"];\n", | 
			
		
	
		
			
				
					|  |  |  |                     MTBDD_STRIPMARK(mtbdd), mtbddnode_getvariable(n)); | 
			
		
	
		
			
				
					|  |  |  |      | 
			
		
	
		
			
				
					|  |  |  |             mtbdd_fprintdot_rec(out, mtbddnode_getlow(n), mtbdd_true_marked, mtbdd_false_marked); | 
			
		
	
		
			
				
					|  |  |  |             mtbdd_fprintdot_rec(out, mtbddnode_gethigh(n), mtbdd_true_marked, mtbdd_false_marked); | 
			
		
	
		
			
				
					|  |  |  |      | 
			
		
	
		
			
				
					|  |  |  |             fprintf(out, "%" PRIu64 " -> %" PRIu64 " [style=dashed];\n", | 
			
		
	
		
			
				
					|  |  |  |                     MTBDD_STRIPMARK(mtbdd), | 
			
		
	
		
			
				
					|  |  |  |                     (mtbddnode_getlow(n) == mtbdd_true || mtbddnode_getlow(n) == mtbdd_false) ? mtbddnode_getlow(n) : MTBDD_STRIPMARK(mtbddnode_getlow(n))); | 
			
		
	
		
			
				
					|  |  |  |             fprintf(out, "%" PRIu64 " -> %" PRIu64 " [style=solid dir=both arrowtail=%s];\n", | 
			
		
	
		
			
				
					|  |  |  |                     MTBDD_STRIPMARK(mtbdd), | 
			
		
	
		
			
				
					|  |  |  |                     (mtbddnode_gethigh(n) == mtbdd_true || mtbddnode_gethigh(n) == mtbdd_false) ? mtbddnode_gethigh(n) : MTBDD_STRIPMARK(mtbddnode_gethigh(n)), | 
			
		
	
		
			
				
					|  |  |  |                     mtbddnode_getcomp(n) ? "dot" : "none"); | 
			
		
	
		
			
				
					|  |  |  |         } | 
			
		
	
		
			
				
					|  |  |  |     } | 
			
		
	
		
			
				
					|  |  |  | } | 
			
		
	
		
			
				
					|  |  |  | 
 | 
			
		
	
	
		
			
				
					|  |  | @ -3082,7 +3091,9 @@ mtbdd_fprintdot(FILE *out, MTBDD mtbdd) | 
			
		
	
		
			
				
					|  |  |  |     fprintf(out, "root -> %" PRIu64 " [style=solid dir=both arrowtail=%s];\n", | 
			
		
	
		
			
				
					|  |  |  |             MTBDD_STRIPMARK(mtbdd), MTBDD_HASMARK(mtbdd) ? "dot" : "none"); | 
			
		
	
		
			
				
					|  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |     mtbdd_fprintdot_rec(out, mtbdd); | 
			
		
	
		
			
				
					|  |  |  |     int mtbdd_true_marked = 0; | 
			
		
	
		
			
				
					|  |  |  |     int mtbdd_false_marked = 0; | 
			
		
	
		
			
				
					|  |  |  |     mtbdd_fprintdot_rec(out, mtbdd, &mtbdd_true_marked, &mtbdd_false_marked); | 
			
		
	
		
			
				
					|  |  |  |     mtbdd_unmark_rec(mtbdd); | 
			
		
	
		
			
				
					|  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |     fprintf(out, "}\n"); | 
			
		
	
	
		
			
				
					|  |  | 
 |