src/cmuBdd/bddprint.c File Reference

#include "bddint.h"
Include dependency graph for bddprint.c:

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)

Function Documentation

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.

00010 {
00011   int i;
00012 
00013   for (i=0; i < n; ++i)
00014     fputc(c, fp);
00015 }

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 }


Generated on Tue Jan 12 13:57:15 2010 for glu-2.2 by  doxygen 1.6.1