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

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

?? cuddzddgroup.c

?? 主要進行大規模的電路綜合
?? C
?? 第 1 頁 / 共 3 頁
字號:
	    } while (result != 0);	    break;	case CUDD_REORDER_SYMM_SIFT:	    result = cuddZddSymmSifting(table,lower,upper);	    break;	case CUDD_REORDER_SYMM_SIFT_CONV:	    result = cuddZddSymmSiftingConv(table,lower,upper);	    break;	case CUDD_REORDER_GROUP_SIFT:	    result = zddGroupSifting(table,lower,upper);	    break;	case CUDD_REORDER_LINEAR:	    result = cuddZddLinearSifting(table,lower,upper);	    break;	case CUDD_REORDER_LINEAR_CONVERGE:	    do {		initialSize = table->keysZ;		result = cuddZddLinearSifting(table,lower,upper);		if (initialSize <= table->keysZ)		    break;#ifdef DD_STATS		else		    (void) fprintf(table->out,"\n");#endif	    } while (result != 0);	    break;	default:	    return(0);	}    }    /* Create a single group for all the variables that were sifted,    ** so that they will be treated as a single block by successive    ** invocations of zddGroupSifting.    */    zddMergeGroups(table,treenode,lower,upper);#ifdef DD_DEBUG    if (pr > 0) (void) fprintf(table->out,"zddReorderChildren:");#endif    return(result);} /* end of zddReorderChildren *//**Function********************************************************************  Synopsis    [Finds the lower and upper bounds of the group represented  by treenode.]  Description [Finds the lower and upper bounds of the group represented  by treenode.  The high and low fields of treenode are indices.  From  those we need to derive the current positions, and find maximum and  minimum.]  SideEffects [The bounds are returned as side effects.]  SeeAlso     []******************************************************************************/static voidzddFindNodeHiLo(  DdManager * table,  MtrNode * treenode,  int * lower,  int * upper){    int low;    int high;    /* Check whether no variables in this group already exist.    ** If so, return immediately. The calling procedure will know from    ** the values of upper that no reordering is needed.    */    if ((int) treenode->low >= table->sizeZ) {	*lower = table->sizeZ;	*upper = -1;	return;    }    *lower = low = (unsigned int) table->permZ[treenode->index];    high = (int) (low + treenode->size - 1);    if (high >= table->sizeZ) {	/* This is the case of a partially existing group. The aim is to	** reorder as many variables as safely possible.  If the tree	** node is terminal, we just reorder the subset of the group	** that is currently in existence.  If the group has	** subgroups, then we only reorder those subgroups that are	** fully instantiated.  This way we avoid breaking up a group.	*/	MtrNode *auxnode = treenode->child;	if (auxnode == NULL) {	    *upper = (unsigned int) table->sizeZ - 1;	} else {	    /* Search the subgroup that strands the table->sizeZ line.	    ** If the first group starts at 0 and goes past table->sizeZ	    ** upper will get -1, thus correctly signaling that no reordering	    ** should take place.	    */	    while (auxnode != NULL) {		int thisLower = table->permZ[auxnode->low];		int thisUpper = thisLower + auxnode->size - 1;		if (thisUpper >= table->sizeZ && thisLower < table->sizeZ)		    *upper = (unsigned int) thisLower - 1;		auxnode = auxnode->younger;	    }	}    } else {	/* Normal case: All the variables of the group exist. */	*upper = (unsigned int) high;    }#ifdef DD_DEBUG    /* Make sure that all variables in group are contiguous. */    assert(treenode->size >= *upper - *lower + 1);#endif    return;} /* end of zddFindNodeHiLo *//**Function********************************************************************  Synopsis    [Comparison function used by qsort.]  Description [Comparison function used by qsort to order the variables  according to the number of keys in the subtables.  Returns the  difference in number of keys between the two variables being  compared.]  SideEffects [None]******************************************************************************/static intzddUniqueCompareGroup(  int * ptrX,  int * ptrY){#if 0    if (entry[*ptrY] == entry[*ptrX]) {	return((*ptrX) - (*ptrY));    }#endif    return(entry[*ptrY] - entry[*ptrX]);} /* end of zddUniqueCompareGroup *//**Function********************************************************************  Synopsis    [Sifts from treenode->low to treenode->high.]  Description [Sifts from treenode->low to treenode->high. If  croupcheck == CUDD_GROUP_CHECK7, it checks for group creation at the  end of the initial sifting. If a group is created, it is then sifted  again. After sifting one variable, the group that contains it is  dissolved.  Returns 1 in case of success; 0 otherwise.]  SideEffects [None]******************************************************************************/static intzddGroupSifting(  DdManager * table,  int  lower,  int  upper){    int		*var;    int		i,j,x,xInit;    int		nvars;    int		classes;    int		result;    int		*sifted;#ifdef DD_STATS    unsigned	previousSize;#endif    int		xindex;    nvars = table->sizeZ;    /* Order variables to sift. */    entry = NULL;    sifted = NULL;    var = ALLOC(int,nvars);    if (var == NULL) {	table->errorCode = CUDD_MEMORY_OUT;	goto zddGroupSiftingOutOfMem;    }    entry = ALLOC(int,nvars);    if (entry == NULL) {	table->errorCode = CUDD_MEMORY_OUT;	goto zddGroupSiftingOutOfMem;    }    sifted = ALLOC(int,nvars);    if (sifted == NULL) {	table->errorCode = CUDD_MEMORY_OUT;	goto zddGroupSiftingOutOfMem;    }    /* Here we consider only one representative for each group. */    for (i = 0, classes = 0; i < nvars; i++) {	sifted[i] = 0;	x = table->permZ[i];	if ((unsigned) x >= table->subtableZ[x].next) {	    entry[i] = table->subtableZ[x].keys;	    var[classes] = i;	    classes++;	}    }    qsort((void *)var,classes,sizeof(int),(int (*)(const void *, const void *))zddUniqueCompareGroup);    /* Now sift. */    for (i = 0; i < ddMin(table->siftMaxVar,classes); i++) {	if (zddTotalNumberSwapping >= table->siftMaxSwap)	    break;	xindex = var[i];	if (sifted[xindex] == 1) /* variable already sifted as part of group */	    continue;        x = table->permZ[xindex]; /* find current level of this variable */	if (x < lower || x > upper)	    continue;#ifdef DD_STATS	previousSize = table->keysZ;#endif#ifdef DD_DEBUG	/* x is bottom of group */        assert((unsigned) x >= table->subtableZ[x].next);#endif	result = zddGroupSiftingAux(table,x,lower,upper);	if (!result) goto zddGroupSiftingOutOfMem;#ifdef DD_STATS	if (table->keysZ < previousSize) {	    (void) fprintf(table->out,"-");	} else if (table->keysZ > previousSize) {	    (void) fprintf(table->out,"+");	} else {	    (void) fprintf(table->out,"=");	}	fflush(table->out);#endif	/* Mark variables in the group just sifted. */	x = table->permZ[xindex];	if ((unsigned) x != table->subtableZ[x].next) {	    xInit = x;	    do {		j = table->invpermZ[x];		sifted[j] = 1;		x = table->subtableZ[x].next;	    } while (x != xInit);	}#ifdef DD_DEBUG	if (pr > 0) (void) fprintf(table->out,"zddGroupSifting:");#endif    } /* for */    FREE(sifted);    FREE(var);    FREE(entry);    return(1);zddGroupSiftingOutOfMem:    if (entry != NULL)	FREE(entry);    if (var != NULL)	FREE(var);    if (sifted != NULL)	FREE(sifted);    return(0);} /* end of zddGroupSifting *//**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 intzddGroupSiftingAux(  DdManager * table,  int  x,  int  xLow,  int  xHigh){    Move *move;    Move *moves;	/* list of moves */    int  initialSize;    int  result;#ifdef DD_DEBUG    if (pr > 0) (void) fprintf(table->out,"zddGroupSiftingAux from %d to %d\n",xLow,xHigh);    assert((unsigned) x >= table->subtableZ[x].next); /* x is bottom of group */#endif    initialSize = table->keysZ;    moves = NULL;    if (x == xLow) { /* Sift down */#ifdef DD_DEBUG	/* x must be a singleton */	assert((unsigned) x == table->subtableZ[x].next);#endif	if (x == xHigh) return(1);	/* just one variable */        if (!zddGroupSiftingDown(table,x,xHigh,&moves))            goto zddGroupSiftingAuxOutOfMem;	/* at this point x == xHigh, unless early term */	/* move backward and stop at best position */	result = zddGroupSiftingBackward(table,moves,initialSize);#ifdef DD_DEBUG	assert(table->keysZ <= (unsigned) initialSize);#endif        if (!result) goto zddGroupSiftingAuxOutOfMem;    } else if (cuddZddNextHigh(table,x) > xHigh) { /* Sift up */#ifdef DD_DEBUG	/* x is bottom of group */        assert((unsigned) x >= table->subtableZ[x].next);#endif        /* Find top of x's group */        x = table->subtableZ[x].next;        if (!zddGroupSiftingUp(table,x,xLow,&moves))            goto zddGroupSiftingAuxOutOfMem;	/* at this point x == xLow, unless early term */	/* move backward and stop at best position */	result = zddGroupSiftingBackward(table,moves,initialSize);#ifdef DD_DEBUG	assert(table->keysZ <= (unsigned) initialSize);#endif        if (!result) goto zddGroupSiftingAuxOutOfMem;    } else if (x - xLow > xHigh - x) { /* must go down first: shorter */        if (!zddGroupSiftingDown(table,x,xHigh,&moves))            goto zddGroupSiftingAuxOutOfMem;	/* at this point x == xHigh, unless early term */        /* Find top of group */	if (moves) {	    x = moves->y;	}	while ((unsigned) x < table->subtableZ[x].next)	    x = table->subtableZ[x].next;	x = table->subtableZ[x].next;#ifdef DD_DEBUG        /* x should be the top of a group */        assert((unsigned) x <= table->subtableZ[x].next);#endif        if (!zddGroupSiftingUp(table,x,xLow,&moves))            goto zddGroupSiftingAuxOutOfMem;	/* move backward and stop at best position */	result = zddGroupSiftingBackward(table,moves,initialSize);#ifdef DD_DEBUG	assert(table->keysZ <= (unsigned) initialSize);#endif        if (!result) goto zddGroupSiftingAuxOutOfMem;    } else { /* moving up first: shorter */        /* Find top of x's group */        x = table->subtableZ[x].next;        if (!zddGroupSiftingUp(table,x,xLow,&moves))            goto zddGroupSiftingAuxOutOfMem;	/* at this point x == xHigh, unless early term */        if (moves) {	    x = moves->x;	}	while ((unsigned) x < table->subtableZ[x].next)	    x = table->subtableZ[x].next;#ifdef DD_DEBUG        /* x is bottom of a group */        assert((unsigned) x >= table->subtableZ[x].next);#endif        if (!zddGroupSiftingDown(table,x,xHigh,&moves))            goto zddGroupSiftingAuxOutOfMem;	/* move backward and stop at best position */	result = zddGroupSiftingBackward(table,moves,initialSize);#ifdef DD_DEBUG	assert(table->keysZ <= (unsigned) initialSize);#endif        if (!result) goto zddGroupSiftingAuxOutOfMem;    }    while (moves != NULL) {        move = moves->next;        cuddDeallocNode(table, (DdNode *) moves);        moves = move;    }    return(1);zddGroupSiftingAuxOutOfMem:    while (moves != NULL) {        move = moves->next;        cuddDeallocNode(table, (DdNode *) moves);        moves = move;    }    return(0);} /* end of zddGroupSiftingAux *//**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]

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
精品国产乱码久久久久久图片| 国精品**一区二区三区在线蜜桃| 婷婷夜色潮精品综合在线| 免费在线看成人av| 国产九色sp调教91| 97精品超碰一区二区三区| 欧美精品aⅴ在线视频| 久久欧美一区二区| 亚洲一区二区三区四区中文字幕| 麻豆91精品视频| 成人国产一区二区三区精品| 欧美日高清视频| 国产日韩欧美激情| 午夜国产不卡在线观看视频| 岛国一区二区三区| 欧美裸体一区二区三区| 国产精品视频一二三区| 日韩高清一级片| 成年人国产精品| 日韩精品一区二区三区swag | 奇米888四色在线精品| 国产成人精品综合在线观看| 欧美日韩视频在线观看一区二区三区 | 精品国产伦一区二区三区免费 | 91黄视频在线| 久久久久97国产精华液好用吗| 亚洲一区二区视频| 丁香亚洲综合激情啪啪综合| 欧美精品日韩一区| 亚洲天堂久久久久久久| 久久国产成人午夜av影院| 欧美亚洲国产怡红院影院| 国产精品免费丝袜| 免费日韩伦理电影| 欧美亚洲国产bt| 亚洲同性同志一二三专区| 国产一区久久久| 欧美精品乱码久久久久久按摩| 中文字幕亚洲综合久久菠萝蜜| 九九在线精品视频| 欧美丰满高潮xxxx喷水动漫| 亚洲视频电影在线| 丰满少妇在线播放bd日韩电影| 日韩一区二区三区电影| 亚洲一区二区三区四区五区中文| av不卡免费电影| 欧美高清在线视频| 国产在线麻豆精品观看| 91精品国产免费| 视频精品一区二区| 在线视频你懂得一区二区三区| 国产精品美女久久久久久久网站| 国产一区二区不卡| 久久中文字幕电影| 狠狠色狠狠色综合| 91精品国产综合久久婷婷香蕉| 一区二区三区蜜桃| 一道本成人在线| 亚洲精品免费电影| 93久久精品日日躁夜夜躁欧美| 国产日韩欧美精品综合| 国产精品综合二区| 久久久精品免费观看| 国产美女一区二区三区| 久久久久亚洲综合| 国产福利91精品| 欧美激情一区二区三区全黄| 成人永久aaa| 中文字幕中文字幕一区| 99国产精品久久久久久久久久久| 国产精品天美传媒| 成人av中文字幕| 国产精品的网站| 色婷婷综合五月| 亚洲永久精品国产| 欧美日韩一区二区在线视频| 午夜视频一区二区三区| 7777精品伊人久久久大香线蕉 | 日韩视频免费直播| 激情六月婷婷久久| 久久久影院官网| 国产高清精品网站| 国产精品国产自产拍在线| 久草热8精品视频在线观看| 欧美精品一区二区三区一线天视频 | 久久国产精品免费| 久久久久久久久99精品| 成人一区二区三区中文字幕| 国产精品视频你懂的| 99国内精品久久| 亚洲小说春色综合另类电影| 欧美日本韩国一区二区三区视频| 午夜欧美在线一二页| 日韩一区二区在线免费观看| 国产精品资源在线| 国产精品久久久久久久蜜臀 | 亚洲五码中文字幕| 日韩欧美亚洲国产精品字幕久久久 | 波多野结衣91| 亚洲午夜精品网| 欧美精品久久久久久久久老牛影院| 日韩中文字幕不卡| 精品91自产拍在线观看一区| 94-欧美-setu| 日韩精品成人一区二区在线| 久久蜜桃香蕉精品一区二区三区| 91亚洲国产成人精品一区二区三| 香蕉成人伊视频在线观看| 久久久影视传媒| 欧洲国内综合视频| 国内久久婷婷综合| 亚洲男人电影天堂| 日韩欧美亚洲国产精品字幕久久久| 成人av中文字幕| 日韩电影免费一区| 最新不卡av在线| 欧美一级在线免费| 91视视频在线观看入口直接观看www | 99riav一区二区三区| 日日摸夜夜添夜夜添精品视频| 国产人久久人人人人爽| 在线观看国产精品网站| 国产电影一区在线| 日日噜噜夜夜狠狠视频欧美人| 国产欧美日产一区| 欧美二区乱c少妇| 成人激情电影免费在线观看| 视频一区二区中文字幕| 国产精品成人在线观看| 日韩三级精品电影久久久 | 一区二区日韩电影| 久久亚洲春色中文字幕久久久| 欧美亚洲综合另类| 丁香婷婷综合激情五月色| 精品久久免费看| 日韩高清一区二区| 欧美亚洲国产怡红院影院| 国产一区二区三区最好精华液| 亚洲综合在线视频| 国产午夜亚洲精品羞羞网站| 3d动漫精品啪啪一区二区竹菊| 成人av网址在线观看| 国产一区二区三区精品视频| 天堂影院一区二区| 中文字幕日韩av资源站| 精品福利av导航| 欧美精品色综合| 国产91精品久久久久久久网曝门| 亚洲免费av网站| 欧美国产欧美亚州国产日韩mv天天看完整 | 日韩一级完整毛片| 欧美这里有精品| 99久久国产综合色|国产精品| 国产一区欧美日韩| 精品中文字幕一区二区小辣椒 | 欧美一区欧美二区| 欧美私人免费视频| 97久久精品人人做人人爽50路| 国产麻豆精品在线观看| 日本不卡不码高清免费观看| 亚洲精品成a人| 国产精品二区一区二区aⅴ污介绍| 久久久久亚洲蜜桃| 亚洲精品一线二线三线| 色成年激情久久综合| 99精品视频一区| 99久久国产免费看| 成人h动漫精品一区二区| 国产69精品久久99不卡| 国产精品69毛片高清亚洲| 精品一区二区三区免费播放 | 精品福利av导航| 久久综合久久综合久久| 日韩久久免费av| 精品国产一区二区三区久久久蜜月| 4438成人网| 日韩三级在线观看| 欧美成人精品高清在线播放| 精品少妇一区二区三区| 精品日韩成人av| 久久久99精品免费观看不卡| 久久久久国产精品免费免费搜索| 久久久久88色偷偷免费| 国产欧美精品一区二区色综合朱莉| 国产欧美一区二区精品久导航| 国产性色一区二区| 国产精品国产精品国产专区不片 | 欧美视频一二三区| 欧美丰满少妇xxxbbb| 宅男噜噜噜66一区二区66| 在线综合+亚洲+欧美中文字幕| 欧美精品三级在线观看| 日韩欧美亚洲一区二区| 久久综合九色综合久久久精品综合| 2020国产精品| 国产精品国产三级国产三级人妇 | 91豆麻精品91久久久久久| 欧美在线|欧美| 欧美一级搡bbbb搡bbbb| 久久亚洲精品小早川怜子|