亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? cuddgroup.c

?? 主要進行大規模的電路綜合
?? C
?? 第 1 頁 / 共 5 頁
字號:
  Synopsis    [Creates a group encompassing variables from x to y in the  DD table.]  Description [Creates a group encompassing variables from x to y in the  DD table. In the current implementation it must be y == x+1.  Returns 1 in case of success; 0 otherwise.]  SideEffects [None]******************************************************************************/static voidddCreateGroup(  DdManager * table,  int  x,  int  y){    int  gybot;#ifdef DD_DEBUG    assert(y == x+1);#endif    /* Find bottom of second group. */    gybot = y;    while ((unsigned) gybot < table->subtables[gybot].next)	gybot = table->subtables[gybot].next;    /* Link groups. */    table->subtables[x].next = y;    table->subtables[gybot].next = x;    return;} /* ddCreateGroup *//**Function********************************************************************  Synopsis    [Sifts one variable up and down until it has taken all  positions. Checks for aggregation.]  Description [Sifts one variable up and down until it has taken all  positions. Checks for aggregation. There may be at most two sweeps,  even if the group grows.  Assumes that x is either an isolated  variable, or it is the bottom of a group. All groups may not have  been found. The variable being moved is returned to the best position  seen during sifting.  Returns 1 in case of success; 0 otherwise.]  SideEffects [None]******************************************************************************/static intddGroupSiftingAux(  DdManager * table,  int  x,  int  xLow,  int  xHigh,  int (*checkFunction)(DdManager *, int, int),  int lazyFlag){    Move *move;    Move *moves;	/* list of moves */    int  initialSize;    int  result;    int  y;    int  topbot;#ifdef DD_DEBUG    if (pr > 0) (void) fprintf(table->out,			       "ddGroupSiftingAux from %d to %d\n",xLow,xHigh);    assert((unsigned) x >= table->subtables[x].next); /* x is bottom of group */#endif    initialSize = table->keys - table->isolated;    moves = NULL;    originalSize = initialSize;		/* for lazy sifting */    /* If we have a singleton, we check for aggregation in both    ** directions before we sift.    */    if ((unsigned) x == table->subtables[x].next) {	/* Will go down first, unless x == xHigh:	** Look for aggregation above x.	*/	for (y = x; y > xLow; y--) {	    if (!checkFunction(table,y-1,y))		break;	    topbot = table->subtables[y-1].next; /* find top of y-1's group */	    table->subtables[y-1].next = y;	    table->subtables[x].next = topbot; /* x is bottom of group so its */					       /* next is top of y-1's group */	    y = topbot + 1; /* add 1 for y--; new y is top of group */	}	/* Will go up first unless x == xlow:	** Look for aggregation below x.	*/	for (y = x; y < xHigh; y++) {	    if (!checkFunction(table,y,y+1))		break;	    /* find bottom of y+1's group */	    topbot = y + 1;	    while ((unsigned) topbot < table->subtables[topbot].next) {		topbot = table->subtables[topbot].next;	    }	    table->subtables[topbot].next = table->subtables[y].next;	    table->subtables[y].next = y + 1;	    y = topbot - 1; /* subtract 1 for y++; new y is bottom of group */	}    }    /* Now x may be in the middle of a group.    ** Find bottom of x's group.    */    while ((unsigned) x < table->subtables[x].next)	x = table->subtables[x].next;    originalLevel = x;			/* for lazy sifting */    if (x == xLow) { /* Sift down */#ifdef DD_DEBUG	/* x must be a singleton */	assert((unsigned) x == table->subtables[x].next);#endif	if (x == xHigh) return(1);	/* just one variable */        if (!ddGroupSiftingDown(table,x,xHigh,checkFunction,&moves))            goto ddGroupSiftingAuxOutOfMem;	/* at this point x == xHigh, unless early term */	/* move backward and stop at best position */	result = ddGroupSiftingBackward(table,moves,initialSize,					DD_SIFT_DOWN,lazyFlag);#ifdef DD_DEBUG	assert(table->keys - table->isolated <= (unsigned) initialSize);#endif        if (!result) goto ddGroupSiftingAuxOutOfMem;    } else if (cuddNextHigh(table,x) > xHigh) { /* Sift up */#ifdef DD_DEBUG	/* x is bottom of group */        assert((unsigned) x >= table->subtables[x].next);#endif        /* Find top of x's group */        x = table->subtables[x].next;        if (!ddGroupSiftingUp(table,x,xLow,checkFunction,&moves))            goto ddGroupSiftingAuxOutOfMem;	/* at this point x == xLow, unless early term */	/* move backward and stop at best position */	result = ddGroupSiftingBackward(table,moves,initialSize,					DD_SIFT_UP,lazyFlag);#ifdef DD_DEBUG	assert(table->keys - table->isolated <= (unsigned) initialSize);#endif        if (!result) goto ddGroupSiftingAuxOutOfMem;    } else if (x - xLow > xHigh - x) { /* must go down first: shorter */        if (!ddGroupSiftingDown(table,x,xHigh,checkFunction,&moves))            goto ddGroupSiftingAuxOutOfMem;	/* at this point x == xHigh, unless early term */        /* Find top of group */	if (moves) {	    x = moves->y;	}	while ((unsigned) x < table->subtables[x].next)	    x = table->subtables[x].next;	x = table->subtables[x].next;#ifdef DD_DEBUG        /* x should be the top of a group */        assert((unsigned) x <= table->subtables[x].next);#endif        if (!ddGroupSiftingUp(table,x,xLow,checkFunction,&moves))            goto ddGroupSiftingAuxOutOfMem;	/* move backward and stop at best position */	result = ddGroupSiftingBackward(table,moves,initialSize,					DD_SIFT_UP,lazyFlag);#ifdef DD_DEBUG	assert(table->keys - table->isolated <= (unsigned) initialSize);#endif        if (!result) goto ddGroupSiftingAuxOutOfMem;    } else { /* moving up first: shorter */        /* Find top of x's group */        x = table->subtables[x].next;        if (!ddGroupSiftingUp(table,x,xLow,checkFunction,&moves))            goto ddGroupSiftingAuxOutOfMem;	/* at this point x == xHigh, unless early term */        if (moves) {	    x = moves->x;	}	while ((unsigned) x < table->subtables[x].next)	    x = table->subtables[x].next;#ifdef DD_DEBUG        /* x is bottom of a group */        assert((unsigned) x >= table->subtables[x].next);#endif        if (!ddGroupSiftingDown(table,x,xHigh,checkFunction,&moves))            goto ddGroupSiftingAuxOutOfMem;	/* move backward and stop at best position */	result = ddGroupSiftingBackward(table,moves,initialSize,					DD_SIFT_DOWN,lazyFlag);#ifdef DD_DEBUG	assert(table->keys - table->isolated <= (unsigned) initialSize);#endif        if (!result) goto ddGroupSiftingAuxOutOfMem;    }    while (moves != NULL) {        move = moves->next;        cuddDeallocNode(table, (DdNode *) moves);        moves = move;    }    return(1);ddGroupSiftingAuxOutOfMem:    while (moves != NULL) {        move = moves->next;        cuddDeallocNode(table, (DdNode *) moves);        moves = move;    }    return(0);} /* end of ddGroupSiftingAux *//**Function********************************************************************  Synopsis    [Sifts up a variable until either it reaches position xLow  or the size of the DD heap increases too much.]  Description [Sifts up a variable until either it reaches position  xLow or the size of the DD heap increases too much. Assumes that y is  the top of a group (or a singleton).  Checks y for aggregation to the  adjacent variables. Records all the moves that are appended to the  list of moves received as input and returned as a side effect.  Returns 1 in case of success; 0 otherwise.]  SideEffects [None]******************************************************************************/static intddGroupSiftingUp(  DdManager * table,  int  y,  int  xLow,  int (*checkFunction)(DdManager *, int, int),  Move ** moves){    Move *move;    int  x;    int  size;    int  i;    int  gxtop,gybot;    int  limitSize;    int  xindex, yindex;    int  zindex;    int  z;    int  isolated;    int  L;	/* lower bound on DD size */#ifdef DD_DEBUG    int  checkL;#endif    yindex = table->invperm[y];    /* Initialize the lower bound.    ** The part of the DD below the bottom of y's group will not change.    ** The part of the DD above y that does not interact with any    ** variable of y's group will not change.    ** The rest may vanish in the best case, except for    ** the nodes at level xLow, which will not vanish, regardless.    ** What we use here is not really a lower bound, because we ignore    ** the interactions with all variables except y.    */    limitSize = L = table->keys - table->isolated;    gybot = y;    while ((unsigned) gybot < table->subtables[gybot].next)	gybot = table->subtables[gybot].next;    for (z = xLow + 1; z <= gybot; z++) {	zindex = table->invperm[z];	if (zindex == yindex || cuddTestInteract(table,zindex,yindex)) {	    isolated = table->vars[zindex]->ref == 1;	    L -= table->subtables[z].keys - isolated;	}    }    originalLevel = y;			/* for lazy sifting */    x = cuddNextLow(table,y);    while (x >= xLow && L <= limitSize) {#ifdef DD_DEBUG	gybot = y;	while ((unsigned) gybot < table->subtables[gybot].next)	    gybot = table->subtables[gybot].next;	checkL = table->keys - table->isolated;	for (z = xLow + 1; z <= gybot; z++) {	    zindex = table->invperm[z];	    if (zindex == yindex || cuddTestInteract(table,zindex,yindex)) {		isolated = table->vars[zindex]->ref == 1;		checkL -= table->subtables[z].keys - isolated;	    }	}	if (pr > 0 && L != checkL) {	    (void) fprintf(table->out,			   "Inaccurate lower bound: L = %d checkL = %d\n",			   L, checkL);	}#endif        gxtop = table->subtables[x].next;        if (checkFunction(table,x,y)) {	    /* Group found, attach groups */	    table->subtables[x].next = y;	    i = table->subtables[y].next;	    while (table->subtables[i].next != (unsigned) y)		i = table->subtables[i].next;	    table->subtables[i].next = gxtop;	    move = (Move *)cuddDynamicAllocNode(table);	    if (move == NULL) goto ddGroupSiftingUpOutOfMem;	    move->x = x;	    move->y = y;	    move->flags = MTR_NEWNODE;	    move->size = table->keys - table->isolated;	    move->next = *moves;	    *moves = move;        } else if (table->subtables[x].next == (unsigned) x &&		   table->subtables[y].next == (unsigned) y) {            /* x and y are self groups */	    xindex = table->invperm[x];            size = cuddSwapInPlace(table,x,y);#ifdef DD_DEBUG            assert(table->subtables[x].next == (unsigned) x);            assert(table->subtables[y].next == (unsigned) y);#endif            if (size == 0) goto ddGroupSiftingUpOutOfMem;	    /* Update the lower bound. */	    if (cuddTestInteract(table,xindex,yindex)) {		isolated = table->vars[xindex]->ref == 1;		L += table->subtables[y].keys - isolated;	    }            move = (Move *)cuddDynamicAllocNode(table);            if (move == NULL) goto ddGroupSiftingUpOutOfMem;            move->x = x;            move->y = y;	    move->flags = MTR_DEFAULT;            move->size = size;            move->next = *moves;            *moves = move;#ifdef DD_DEBUG	    if (pr > 0) (void) fprintf(table->out,				       "ddGroupSiftingUp (2 single groups):\n");#endif            if ((double) size > (double) limitSize * table->maxGrowth)		return(1);            if (size < limitSize) limitSize = size;        } else { /* Group move */            size = ddGroupMove(table,x,y,moves);	    if (size == 0) goto ddGroupSiftingUpOutOfMem;	    /* Update the lower bound. */	    z = (*moves)->y;	    do {		zindex = table->invperm[z];		if (cuddTestInteract(table,zindex,yindex)) {		    isolated = table->vars[zindex]->ref == 1;		    L += table->subtables[z].keys - isolated;		}		z = table->subtables[z].next;	    } while (z != (int) (*moves)->y);            if ((double) size > (double) limitSize * table->maxGrowth)		return(1);            if (size < limitSize) limitSize = size;        }        y = gxtop;        x = cuddNextLow(table,y);    }    return(1);ddGroupSiftingUpOutOfMem:    while (*moves != NULL) {        move = (*moves)->next;        cuddDeallocNode(table, (DdNode *) *moves);        *moves = move;    }    return(0);} /* end of ddGroupSiftingUp *//**Function********************************************************************  Synopsis    [Sifts down a variable until it reaches position xHigh.]  Description [Sifts down a variable until it reaches position xHigh.  Assumes that x is the bottom of a group (or a singleton).  Records  all the moves.  Returns 1 in case of success; 0 otherwise.]  SideEffects [None]******************************************************************************/static intddGroupSiftingDown(  DdManager * table,  int  x,  int  xHigh,  int (*checkFunction)(DdManager *, int, int),  Move ** moves){    Move *move;    int  y;    int  size;    int  limitSize;    int  gxtop,gybot;    int  R;	/* upper bound on node decrease */    int  xindex, yindex;    int  isolated, allVars;    int  z;    int  zindex;

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
成人爽a毛片一区二区免费| 一本色道亚洲精品aⅴ| 国模冰冰炮一区二区| 国产精品77777| 色欧美日韩亚洲| 欧美一级国产精品| 久久久久久久综合日本| 亚洲三级电影网站| 老汉av免费一区二区三区 | 国产精品成人免费在线| 一区二区三区毛片| 蜜桃视频免费观看一区| 92精品国产成人观看免费| 欧美一二三四区在线| 国产精品黄色在线观看| 欧美aⅴ一区二区三区视频| 成a人片国产精品| 日韩一区二区三区电影在线观看| 国产精品毛片久久久久久| 免费日韩伦理电影| 色偷偷久久一区二区三区| 国产网红主播福利一区二区| 一区二区激情视频| 成人免费视频视频在线观看免费| 欧美精品久久天天躁| 中文字幕一区日韩精品欧美| 精品亚洲免费视频| 欧美日韩一区二区在线观看 | 亚洲裸体xxx| 成人国产电影网| 久久久国际精品| 麻豆91在线播放免费| 91精品免费在线| 午夜精品福利视频网站| 91久久国产综合久久| 亚洲欧洲国产日本综合| 国产成人精品www牛牛影视| 精品国产乱码久久久久久夜甘婷婷| 日韩电影一区二区三区| 欧美精品一二三| 日韩电影免费一区| 欧美一区二区黄| 蜜桃av一区二区三区电影| 在线播放亚洲一区| 蜜乳av一区二区| 久久综合给合久久狠狠狠97色69| 日韩精品1区2区3区| 日韩精品一区二区三区视频播放| 亚洲h在线观看| 欧美电影免费观看高清完整版| 日日嗨av一区二区三区四区| 91精品国产综合久久国产大片| 日韩黄色免费电影| 欧美电视剧免费全集观看| 国产大片一区二区| 亚洲欧美色综合| 欧美一区二区三区思思人| 狠狠久久亚洲欧美| 亚洲欧洲韩国日本视频| 欧美日韩一区二区在线观看视频| 麻豆91在线观看| 一区二区三区四区精品在线视频| 日韩女优制服丝袜电影| 色综合天天性综合| 久久不见久久见免费视频1| 国产精品伦理一区二区| 欧美日本国产视频| 国产.精品.日韩.另类.中文.在线.播放 | 欧美午夜精品一区| 国产成人综合在线观看| 亚洲国产精品久久艾草纯爱| 国产日韩三级在线| 欧美精品久久99久久在免费线 | www.亚洲精品| 韩国成人在线视频| 亚洲综合久久久| 久久在线免费观看| 欧美日韩一卡二卡三卡| 99久久综合狠狠综合久久| 麻豆精品国产传媒mv男同| 亚洲精品老司机| 国产清纯在线一区二区www| 91精品欧美一区二区三区综合在 | 三级在线观看一区二区| 亚洲欧洲制服丝袜| 中文字幕欧美一| 国产精品免费久久久久| 久久久精品国产免费观看同学| 91麻豆精品国产自产在线观看一区 | 日韩三级.com| 3d动漫精品啪啪一区二区竹菊| 91国模大尺度私拍在线视频| 99视频在线观看一区三区| 成人午夜视频网站| 成人免费视频一区| 99精品欧美一区二区三区小说| 国产成人在线视频播放| 国产成人综合视频| aaa亚洲精品一二三区| 99精品久久久久久| 92国产精品观看| 欧美色图免费看| 欧美巨大另类极品videosbest | 蜜桃久久久久久久| 亚洲一级二级在线| 国产欧美一区二区精品秋霞影院| 日韩美女一区二区三区四区| 欧美精品高清视频| 成人黄色在线网站| 欧美日韩卡一卡二| 中文字幕一区二区三区在线不卡| 日韩电影在线一区二区三区| 日本久久一区二区| 国产精品天美传媒| 首页国产欧美日韩丝袜| 精品在线观看视频| eeuss鲁一区二区三区| 在线观看网站黄不卡| 欧美另类videos死尸| 日韩精品一区二| 国产精品传媒在线| 日韩主播视频在线| 丁香桃色午夜亚洲一区二区三区| 91视频观看视频| 日韩精品一区二区三区老鸭窝 | 国产日产精品一区| 午夜精品国产更新| 成人免费视频视频在线观看免费 | 精品国产污网站| 国产精品美女久久久久久久久久久| 午夜视频一区二区| 欧美性做爰猛烈叫床潮| 亚洲人快播电影网| 91碰在线视频| 亚洲人午夜精品天堂一二香蕉| 丁香天五香天堂综合| 久久综合九色综合97婷婷女人| 亚洲综合色婷婷| 激情久久五月天| 欧美久久一区二区| 一区二区在线观看av| 色婷婷久久一区二区三区麻豆| 亚洲国产精品成人久久综合一区| 久久99最新地址| 欧美大度的电影原声| 国产美女视频一区| 国产日韩av一区二区| 成人蜜臀av电影| 国产精品国产三级国产普通话99| 成人精品小蝌蚪| 日韩美女精品在线| 欧美理论在线播放| 久久福利视频一区二区| 中文字幕精品一区二区精品绿巨人| 国内外成人在线| 国产亚洲人成网站| 99国产精品一区| 亚洲综合丁香婷婷六月香| 制服丝袜在线91| 香蕉加勒比综合久久| 成人黄色av电影| 日韩免费看的电影| 91天堂素人约啪| 国产一区二区三区免费观看| 亚洲一区二区三区三| 国产精品网站导航| 日韩免费一区二区三区在线播放| 欧美影院一区二区三区| 成人av电影在线播放| 日一区二区三区| 亚洲精品免费一二三区| 337p粉嫩大胆色噜噜噜噜亚洲| 色噜噜狠狠成人网p站| 国产成人av影院| 日韩高清不卡在线| 国产精品丝袜一区| 欧美高清一级片在线| 成人自拍视频在线观看| 日日夜夜一区二区| 日韩理论片在线| 国产日韩高清在线| 精品久久久久香蕉网| 欧美视频一区二区三区四区| 国产不卡在线视频| 国模少妇一区二区三区| 九色porny丨国产精品| 五月天一区二区三区| 性做久久久久久| 亚洲国产成人精品视频| 亚洲在线观看免费| 日韩影院在线观看| 琪琪久久久久日韩精品| 日本在线不卡视频| 蜜桃视频一区二区| 国产一区二区三区综合| 国产精品123区| 成人av免费在线观看| 色呦呦国产精品| 不卡高清视频专区| 91浏览器在线视频|