Ejemplo n.º 1
0
Archivo: jbuddy.c Proyecto: Sable/jedd
static int bdd_markwidth_rec(int bdd, int level, int seenTerminals[])
{
   BddNode *node;
   
   if (bdd < 2) {
       if(seenTerminals[bdd]) {
           return 0;
       } else {
           seenTerminals[bdd] = 1;
           return 1;
       }
   }

   node = &bddnodes[bdd];
   if (MARKEDp(node)  ||  LOWp(node) == -1)
      return 0;
   
   if(LEVELp(node) > level) {
       // this is a node we want to count
       SETMARKp(node);
       return 1;
   } else {
       SETMARKp(node);
       return bdd_markwidth_rec(LOWp(node), level, seenTerminals)
            + bdd_markwidth_rec(HIGHp(node), level, seenTerminals);
   }
}
Ejemplo n.º 2
0
void bdd_mark(int i)
{
   BddNode *node;
   
   if (i < 2)
      return;

   node = &bddnodes[i];
   if (MARKEDp(node)  ||  LOWp(node) == INVALID_BDD)
      return;
   
   SETMARKp(node);
   
   bdd_mark(LOWp(node));
   bdd_mark(HIGHp(node));
}
Ejemplo n.º 3
0
void bdd_markcount(int i, int *cou)
{
   BddNode *node;
   
   if (i < 2)
      return;

   node = &bddnodes[i];
   if (MARKEDp(node)  ||  LOWp(node) == -1)
      return;
   
   SETMARKp(node);
   *cou += 1;
   
   bdd_markcount(LOWp(node), cou);
   bdd_markcount(HIGHp(node), cou);
}
Ejemplo n.º 4
0
Archivo: jbuddy.c Proyecto: Sable/jedd
void bdd_markshape(int i, int shape[])
{
   BddNode *node;
   
   if (i < 2)
      return;

   node = &bddnodes[i];
   if (MARKEDp(node)  ||  LOWp(node) == -1)
      return;
   
   shape[LEVELp(node)]++;
   SETMARKp(node);
   
   bdd_markshape(LOWp(node), shape);
   bdd_markshape(HIGHp(node), shape);
}
Ejemplo n.º 5
0
void bdd_mark_upto(int i, int level)
{
   BddNode *node = &bddnodes[i];
   
   if (i < 2)
      return;
   
   if (MARKEDp(node)  ||  LOWp(node) == INVALID_BDD)
      return;
   
   if (LEVELp(node) > level)
      return;

   SETMARKp(node);

   bdd_mark_upto(LOWp(node), level);
   bdd_mark_upto(HIGHp(node), level);
}
Ejemplo n.º 6
0
Archivo: bddio.c Proyecto: cvs77/jchord
static int bdd_save_rec(FILE *ofile, int root)
{
   BddNode *node = &bddnodes[root];
   int err;
   
   if (root < 2)
      return 0;

   if (MARKEDp(node))
      return 0;
   SETMARKp(node);
   
   if ((err=bdd_save_rec(ofile, LOWp(node))) < 0)
      return err;
   if ((err=bdd_save_rec(ofile, HIGHp(node))) < 0)
      return err;

   fprintf(ofile, "%d %d %d %d\n",
	   root, bddlevel2var[LEVELp(node) & MARKHIDE],
	   LOWp(node), HIGHp(node));

   return 0;
}