示例#1
0
文件: bddio.c 项目: cvs77/jchord
void bdd_fprinttable(FILE *ofile, BDD r)
{
   BddNode *node;
   int n;
   
   fprintf(ofile, "ROOT: %d\n", r);
   if (r < 2)
      return;

   bdd_mark(r);
   
   for (n=0 ; n<bddnodesize ; n++)
   {
      if (MARKED(n))
      {
	 node = &bddnodes[n];
	 
	 UNMARKp(node);

	 fprintf(ofile, "[%5d] ", n);
	 if (filehandler)
	    filehandler(ofile, bddlevel2var[LEVELp(node)]);
	 else
	    fprintf(ofile, "%3d", bddlevel2var[LEVELp(node)]);

	 fprintf(ofile, ": %3d", LOWp(node));
	 fprintf(ofile, " %3d", HIGHp(node));
	 fprintf(ofile, "\n");
      }
   }
}
示例#2
0
文件: gc.c 项目: DKXXXL/emesch
void markAndSweep(GCHandler* handler) {
    MemNode* pt = handler->first;
    while(pt != NULL) {
        if(MARKED(pt)) {
            pt->st = inUse;
        } else if (INUSE(pt)) {
            pt -> st = idle;
        }
    }
}
示例#3
0
文件: gc.c 项目: DKXXXL/emesch
void copyGC(GCHandler* handler) {
    handler->gothrough(marker, marked);
    MemNode* pt = handler->first;
    MemNode* newfirst;
    MemNode* newlast;
    while(pt!=NULL && ! (MARKED(pt))) {
        pt = pt -> next;
    }
    newfirst = pt;
    newlast = pt;
    while(pt!=NULL) {
        if(MARKED(pt)) {
            newlast -> next = pt;
            newlast = pt;
        }
        pt = pt -> next;
    }
    // Initialize idle mempool
    int interchangesize = handler->usesize;
    handler->usesize = handler ->idlesize;
    handler->idlesize = interchangesize;

    void* interchangemem = handler -> mempoolIdle;
    handler -> mempoolIdle = handler -> mempoolInUse;
    handler -> mempoolInUse = interchangemem;

    MemNode* first = handler -> mempoolInUse;
    first -> st = idle;
    first -> next = NULL;
    first -> size = handler -> usesize - sizeof(MemNode);

    copyAllObjects(newfirst, first);

    handler -> first = first;

    //Reconnection of the  pointer pointing

}
示例#4
0
文件: minilisp.c 项目: yanoh/minilisp
void sweep(Env *env, Obj *root)
{
    free_list = NULL;
    int i;
    for (i = 0; i < memory.len; i++) {
        Obj *heap = memory.heaps[i];
        int j;
        for (j = 0; j < OBJECTS_PER_HEAP; j++) {
            if (&heap[j] != BITMAP_CELL_OF(heap) && !MARKED(&heap[j])) {
                sweep_obj(&heap[j]);
            }
        }
    }
}
示例#5
0
文件: gg11.c 项目: glammar/glammar
det_rule_head ()
{
  fprintf (output, "\n\n/*  %s   */\n", FREPR (ulhs));
  if (MARKED (ulhs, external))
    fprintf (output, "int D%s(", REPR (ulhs));
  else
    fprintf (output, "static int D_%d(", ulhs);
  det_get_affixes (AFFIXDEF (SON (ulhs)));

  if (fprintf (output, " {\n register AFFIX raf = af;\n") == EOF)
  {
    fprintf (stderr, "glammar: Write failed (try again later)\n");
    exit (12);
  }
  if (BROTHER (SON (ulhs)) != nil)
  {
    fprintf (output, "  char *rc = c,  *rip = ip;\n");
  }
  if (lookahead_in_alt (SON (ulhs)))
    fprintf (output, "  char *lkh;\n");
  if (BROTHER (SON (ulhs)) != nil)
    fprintf (output, "  int cut_set = 0;\n");
  fprintf (output, "  int ltr=level++;\n");
  if (trace_flag)
    fprintf (output, " char *pntnamesv = pntname; char *ntname = \"%s\";\n", FREPR (ulhs));
  else if (errormsg_flag)
  {
    int mem = SON (SON (ulhs));
    if (mem != nil && DEF (mem) == equal)
      fprintf (output, "  char *pntnamesv = pntname; char *ntname = \"%s\"; int lsave = level+10;\n", FREPR (ulhs));
    else
      fprintf (output, "  char *pntnamesv = pntname; char *ntname = \"%s\"; int lsave = level++;\n", FREPR (ulhs));
  }

  if (stat_flag)
  {
    fprintf (output, "  int s1 = stat_count++;\n");
  }
  save_lattice_afx ();
  if (tail_recursion_elimination ())
    fprintf (output, " label_%d:\n\n", ulhs);

}
示例#6
0
static void bdd_fprintdot_rec(FILE* ofile, BDD r)
{
   if (ISCONST(r) || MARKED(r))
      return;

   fprintf(ofile, "%d [label=\"", r);
   if (filehandler)
      filehandler(ofile, bddlevel2var[LEVEL(r)]);
   else
      fprintf(ofile, "%d", bddlevel2var[LEVEL(r)]);
   fprintf(ofile, "\"];\n");

   fprintf(ofile, "%d -> %d [style=dotted];\n", r, LOW(r));
   fprintf(ofile, "%d -> %d [style=filled];\n", r, HIGH(r));

   SETMARK(r);
   
   bdd_fprintdot_rec(ofile, LOW(r));
   bdd_fprintdot_rec(ofile, HIGH(r));
}
示例#7
0
文件: minilisp.c 项目: yanoh/minilisp
void mark_obj(Obj *obj)
{
    if (obj && obj->type != TSPE && !MARKED(obj)) {
    /*
        if (DEBUG_GC)
            printf("marking %p (type: %d)\n", obj, obj->type);
            */

        MARK(obj);
        switch (obj->type) {
        case TCELL:
            mark_obj(obj->car);
            mark_obj(obj->cdr);
            break;
        case TFUNCTION:
        case TMACRO:
            mark_obj(obj->params);
            mark_obj(obj->body);
            break;
        }
    }
}
示例#8
0
bool Board::isFlaged(int row, int column) { return MARKED(row, column); }