23 int i, j, combCounter = 0;
26 vC = Vec_IntAlloc(t+3);
35 printf(
"Comb-%3d : ", ++combCounter);
37 printf(
"vC[%d] = %d ", i, Vec_IntEntry(vC, i));
41 while( Vec_IntEntry( vC, j ) + 1 == Vec_IntEntry( vC, j+1 ) )
44 Vec_IntWriteEntry( vC, j, j-1 );
48 Vec_IntWriteEntry( vC, j, Vec_IntEntry( vC, j ) + 1 );
57 int combN,
int combK )
63 int totalCombination_KNUTH = 0;
68 vC_KNUTH = Vec_IntAlloc(combK+3);
69 for(i_KNUTH=-1; i_KNUTH<combK; i_KNUTH++)
70 Vec_IntPush( vC_KNUTH, i_KNUTH );
71 Vec_IntPush( vC_KNUTH, combN );
72 Vec_IntPush( vC_KNUTH, 0 );
76 totalCombination_KNUTH++;
77 pObjMonoCand = Aig_Not(Aig_ManConst1(pAigNew));
78 for( i_KNUTH=combK; i_KNUTH>0; i_KNUTH--)
80 targetPoIndex = Vec_IntEntry( vCandidateMonotoneSignals_, Vec_IntEntry(vC_KNUTH, i_KNUTH));
81 pObj = Aig_ObjChild0Copy(Aig_ManCo( pAigOld, targetPoIndex ));
82 pObjMonoCand =
Aig_Or( pAigNew, pObj, pObjMonoCand );
84 Vec_PtrPush(vDisj_nCk_, pObjMonoCand );
87 while( Vec_IntEntry( vC_KNUTH, j_KNUTH ) + 1 == Vec_IntEntry( vC_KNUTH, j_KNUTH+1 ) )
89 Vec_IntWriteEntry( vC_KNUTH, j_KNUTH, j_KNUTH-1 );
90 j_KNUTH = j_KNUTH + 1;
92 if( j_KNUTH > combK )
break;
93 Vec_IntWriteEntry( vC_KNUTH, j_KNUTH, Vec_IntEntry( vC_KNUTH, j_KNUTH ) + 1 );
96 Vec_IntFree(vC_KNUTH);
98 return totalCombination_KNUTH;
103 int combN,
int combK )
109 int totalCombination_KNUTH = 0;
111 int i_KNUTH, j_KNUTH;
114 vC_KNUTH = Vec_IntAlloc(combK+3);
115 for(i_KNUTH=-1; i_KNUTH<combK; i_KNUTH++)
116 Vec_IntPush( vC_KNUTH, i_KNUTH );
117 Vec_IntPush( vC_KNUTH, combN );
118 Vec_IntPush( vC_KNUTH, 0 );
122 totalCombination_KNUTH++;
123 pObjMonoCand = Aig_Not(Aig_ManConst1(pAigNew));
124 for( i_KNUTH=combK; i_KNUTH>0; i_KNUTH--)
127 targetPoIndex = Vec_IntEntry(vC_KNUTH, i_KNUTH);
128 pObj = (
Aig_Obj_t *)(Aig_ManLo( pAigOld, targetPoIndex )->pData);
129 pObjMonoCand =
Aig_Or( pAigNew, pObj, pObjMonoCand );
131 Vec_PtrPush(vDisj_nCk_, pObjMonoCand );
134 while( Vec_IntEntry( vC_KNUTH, j_KNUTH ) + 1 == Vec_IntEntry( vC_KNUTH, j_KNUTH+1 ) )
136 Vec_IntWriteEntry( vC_KNUTH, j_KNUTH, j_KNUTH-1 );
137 j_KNUTH = j_KNUTH + 1;
139 if( j_KNUTH > combK )
break;
140 Vec_IntWriteEntry( vC_KNUTH, j_KNUTH, Vec_IntEntry( vC_KNUTH, j_KNUTH ) + 1 );
143 Vec_IntFree(vC_KNUTH);
145 return totalCombination_KNUTH;
152 int piCopied = 0, loCopied = 0, loCreated = 0, liCopied = 0, liCreated = 0, poCopied = 0;
154 int i, nRegCount, hintSingalBeginningMarker, hintSingalEndMarker;
155 int combN_internal, combK_internal;
156 long longI, lCombinationCount;
158 Aig_Obj_t *pObj, *pObjLO_nCk, *pObjDisj_nCk;
159 Vec_Ptr_t *vLO_nCk, *vPODriver_nCk, *vDisj_nCk;
170 if( vCandidateMonotoneSignals == NULL )
172 printf(
"\nTraget Signal Set is Empty: Duplicating given AIG\n");
179 hintSingalBeginningMarker = Vec_IntEntry( vCandidateMonotoneSignals, 0 );
180 hintSingalEndMarker = Vec_IntEntry( vCandidateMonotoneSignals, Vec_IntSize(vCandidateMonotoneSignals) - 1 );
181 combN_internal = hintSingalEndMarker - hintSingalBeginningMarker + 1;
197 sprintf(pNewAig->pName,
"%s_%s", pAig->pName,
"nCk");
198 pNewAig->pSpec = NULL;
201 pObj = Aig_ManConst1( pAig );
202 pObj->
pData = Aig_ManConst1( pNewAig );
219 lCombinationCount = 0;
220 for(combK_internal=1; combK_internal<=combK; combK_internal++)
222 assert( lCombinationCount > 0 );
223 vLO_nCk = Vec_PtrAlloc(lCombinationCount);
224 for( longI = 0; longI < lCombinationCount; longI++ )
228 Vec_PtrPush( vLO_nCk, pObj );
234 pObj->
pData =
Aig_And( pNewAig, Aig_ObjChild0Copy(pObj), Aig_ObjChild1Copy(pObj) );
238 vDisj_nCk = Vec_PtrAlloc(lCombinationCount);
266 for( combK_internal=1; combK_internal<=combK; combK_internal++ )
268 vDisj_nCk, combN_internal, combK_internal );
272 vPODriver_nCk = Vec_PtrAlloc(lCombinationCount);
273 for( longI = 0; longI < lCombinationCount; longI++ )
275 pObjLO_nCk = (
Aig_Obj_t *)(Vec_PtrEntry( vLO_nCk, longI ));
276 pObjDisj_nCk = (
Aig_Obj_t *)(Vec_PtrEntry( vDisj_nCk, longI ));
278 pObj =
Aig_Or( pNewAig, Aig_Not(pObjDisj_nCk), pObjLO_nCk);
279 Vec_PtrPush(vPODriver_nCk, pObj);
290 for( longI = 0; longI < lCombinationCount; longI++ )
303 for( longI = 0; longI < lCombinationCount; longI++ )
310 assert( liCopied + liCreated == loCopied + loCreated );
311 nRegCount = loCopied + loCreated;
325 int piCopied = 0, loCopied = 0, loCreated = 0, liCopied = 0, liCreated = 0, poCopied = 0;
328 int combN_internal, combK_internal;
329 long longI, lCombinationCount;
331 Aig_Obj_t *pObj, *pObjLO_nCk, *pObjDisj_nCk;
332 Vec_Ptr_t *vLO_nCk, *vPODriver_nCk, *vDisj_nCk;
356 combN_internal = Aig_ManRegNum(pAig);
360 sprintf(pNewAig->pName,
"%s_%s", pAig->pName,
"nCk");
361 pNewAig->pSpec = NULL;
364 pObj = Aig_ManConst1( pAig );
365 pObj->
pData = Aig_ManConst1( pNewAig );
382 lCombinationCount = 0;
383 for(combK_internal=1; combK_internal<=combK; combK_internal++)
385 assert( lCombinationCount > 0 );
386 vLO_nCk = Vec_PtrAlloc(lCombinationCount);
387 for( longI = 0; longI < lCombinationCount; longI++ )
391 Vec_PtrPush( vLO_nCk, pObj );
397 pObj->
pData =
Aig_And( pNewAig, Aig_ObjChild0Copy(pObj), Aig_ObjChild1Copy(pObj) );
401 vDisj_nCk = Vec_PtrAlloc(lCombinationCount);
403 for( combK_internal=1; combK_internal<=combK; combK_internal++ )
406 vDisj_nCk, combN_internal, combK_internal );
411 vPODriver_nCk = Vec_PtrAlloc(lCombinationCount);
412 for( longI = 0; longI < lCombinationCount; longI++ )
414 pObjLO_nCk = (
Aig_Obj_t *)(Vec_PtrEntry( vLO_nCk, longI ));
415 pObjDisj_nCk = (
Aig_Obj_t *)(Vec_PtrEntry( vDisj_nCk, longI ));
417 pObj =
Aig_Or( pNewAig, Aig_Not(pObjDisj_nCk), pObjLO_nCk);
418 Vec_PtrPush(vPODriver_nCk, pObj);
429 for( longI = 0; longI < lCombinationCount; longI++ )
442 for( longI = 0; longI < lCombinationCount; longI++ )
449 assert( liCopied + liCreated == loCopied + loCreated );
450 nRegCount = loCopied + loCreated;
456 Vec_PtrFree(vLO_nCk);
457 Vec_PtrFree(vPODriver_nCk);
458 Vec_PtrFree(vDisj_nCk);