#include "bddint.h"
Go to the source code of this file.
Functions | |
static void | chars (char c, int n, FILE *fp) |
static void | bdd_print_top_var (cmu_bdd_manager bddm, bdd f, char *(*var_naming_fn)(cmu_bdd_manager, bdd, pointer), pointer env, FILE *fp) |
static void | cmu_bdd_print_bdd_step (cmu_bdd_manager bddm, bdd f, char *(*var_naming_fn)(cmu_bdd_manager, bdd, pointer), char *(*terminal_id_fn)(cmu_bdd_manager, INT_PTR, INT_PTR, pointer), pointer env, FILE *fp, hash_table h, int indentation) |
void | cmu_bdd_print_bdd (cmu_bdd_manager bddm, bdd f, char *(*var_naming_fn)(cmu_bdd_manager, bdd, pointer), char *(*terminal_id_fn)(cmu_bdd_manager, INT_PTR, INT_PTR, pointer), pointer env, FILE *fp) |
static void bdd_print_top_var | ( | cmu_bdd_manager | bddm, | |
bdd | f, | |||
char *(*)(cmu_bdd_manager, bdd, pointer) | var_naming_fn, | |||
pointer | env, | |||
FILE * | fp | |||
) | [static] |
Definition at line 20 of file bddprint.c.
00025 { 00026 BDD_SETUP(f); 00027 fputs(bdd_var_name(bddm, BDD_IF(bddm, f), var_naming_fn, env), fp); 00028 fputc('\n', fp); 00029 }
static void chars | ( | char | c, | |
int | n, | |||
FILE * | fp | |||
) | [static] |
Definition at line 9 of file bddprint.c.
void cmu_bdd_print_bdd | ( | cmu_bdd_manager | bddm, | |
bdd | f, | |||
char *(*)(cmu_bdd_manager, bdd, pointer) | var_naming_fn, | |||
char *(*)(cmu_bdd_manager, INT_PTR, INT_PTR, pointer) | terminal_id_fn, | |||
pointer | env, | |||
FILE * | fp | |||
) |
Definition at line 114 of file bddprint.c.
00120 { 00121 long next; 00122 hash_table h; 00123 00124 if (!bdd_check_arguments(1, f)) 00125 { 00126 fprintf(fp, "overflow\n"); 00127 return; 00128 } 00129 bdd_mark_shared_nodes(bddm, f); 00130 h=bdd_new_hash_table(bddm, sizeof(long)); 00131 next=0; 00132 bdd_number_shared_nodes(bddm, f, h, &next); 00133 cmu_bdd_print_bdd_step(bddm, f, var_naming_fn, terminal_id_fn, env, fp, h, 0); 00134 cmu_bdd_free_hash_table(h); 00135 }
static void cmu_bdd_print_bdd_step | ( | cmu_bdd_manager | bddm, | |
bdd | f, | |||
char *(*)(cmu_bdd_manager, bdd, pointer) | var_naming_fn, | |||
char *(*)(cmu_bdd_manager, INT_PTR, INT_PTR, pointer) | terminal_id_fn, | |||
pointer | env, | |||
FILE * | fp, | |||
hash_table | h, | |||
int | indentation | |||
) | [static] |
Definition at line 34 of file bddprint.c.
00042 { 00043 int negated; 00044 long *number; 00045 00046 BDD_SETUP(f); 00047 chars(' ', indentation, fp); 00048 switch (cmu_bdd_type_aux(bddm, f)) 00049 { 00050 case BDD_TYPE_ZERO: 00051 case BDD_TYPE_ONE: 00052 case BDD_TYPE_CONSTANT: 00053 fputs(bdd_terminal_id(bddm, f, terminal_id_fn, env), fp); 00054 fputc('\n', fp); 00055 break; 00056 case BDD_TYPE_NEGVAR: 00057 fputc('!', fp); 00058 /* fall through */ 00059 case BDD_TYPE_POSVAR: 00060 bdd_print_top_var(bddm, f, var_naming_fn, env, fp); 00061 break; 00062 case BDD_TYPE_NONTERMINAL: 00063 if (bdd_lookup_in_hash_table(h, BDD_NOT(f))) 00064 { 00065 f=BDD_NOT(f); 00066 negated=1; 00067 } 00068 else 00069 negated=0; 00070 number=(long *)bdd_lookup_in_hash_table(h, f); 00071 if (number && *number < 0) 00072 { 00073 if (negated) 00074 fputc('!', fp); 00075 fprintf(fp, "subformula %ld\n", -*number-1); 00076 } 00077 else 00078 { 00079 if (number) 00080 { 00081 fprintf(fp, "%ld: ", *number); 00082 *number= -*number-1; 00083 } 00084 fputs("if ", fp); 00085 bdd_print_top_var(bddm, f, var_naming_fn, env, fp); 00086 cmu_bdd_print_bdd_step(bddm, BDD_THEN(f), var_naming_fn, terminal_id_fn, env, fp, h, indentation+2); 00087 chars(' ', indentation, fp); 00088 fputs("else if !", fp); 00089 bdd_print_top_var(bddm, f, var_naming_fn, env, fp); 00090 cmu_bdd_print_bdd_step(bddm, BDD_ELSE(f), var_naming_fn, terminal_id_fn, env, fp, h, indentation+2); 00091 chars(' ', indentation, fp); 00092 fputs("endif ", fp); 00093 bdd_print_top_var(bddm, f, var_naming_fn, env, fp); 00094 } 00095 break; 00096 default: 00097 cmu_bdd_fatal("cmu_bdd_print_bdd_step: unknown type returned by cmu_bdd_type"); 00098 } 00099 }