82 for ( pThis = pForm; *pThis; pThis++ )
88 else if ( *pThis ==
')' )
98 word iFans[2], Res, Oper = -1;
101 while ( pBeg[0] ==
'~' )
106 if ( pBeg + 1 == pEnd )
108 if ( pBeg[0] >=
'a' && pBeg[0] <=
'f' )
109 return fCompl ? ~s_Truths6[pBeg[0] -
'a'] : s_Truths6[pBeg[0] -
'a'];
113 if ( pBeg[0] ==
'(' )
116 if ( pEndNew == pEnd )
119 assert( pBeg[pEnd-pBeg-1] ==
')' );
121 return fCompl ? ~Res : Res;
127 iFans[0] = fCompl ? ~iFans[0] : iFans[0];
135 return iFans[0] & iFans[1];
137 return iFans[0] ^ iFans[1];
147 char *
p =
"~((~~d&~(~~b&c))^(~(~a&~d)&~(~c^~b)))";
167 int iFans[2], Res, Oper = -1;
170 while ( pBeg[0] ==
'~' )
175 if ( pBeg + 1 == pEnd )
177 if ( pBeg[0] >=
'a' && pBeg[0] <=
'f' )
178 return Abc_Var2Lit( 1 + pBeg[0] -
'a', fCompl );
182 if ( pBeg[0] ==
'(' )
185 if ( pEndNew == pEnd )
188 assert( pBeg[pEnd-pBeg-1] ==
')' );
190 return Abc_LitNotCond( Res, fCompl );
196 iFans[0] = Abc_LitNotCond( iFans[0], fCompl );
217 char * pStr =
"~((~~d&~(~~b&c))^(~(~a&~d)&~(~c^~b)))";
219 p->pName = Abc_UtilStrsav(
"func_enum_aig" );
221 for ( i = 0; i < 5; i++ )
222 Gia_ManAppendCi(
p );
242 unsigned uTruth, uTruth2;
243 int nFails = 0, nLines = 0;
244 FILE * pFile = fopen( pFileName,
"rb" );
245 while ( fgets( Buffer, 1000, pFile ) )
247 if ( Buffer[
strlen(Buffer)-1] ==
'\n' )
248 Buffer[
strlen(Buffer)-1] = 0;
249 if ( Buffer[
strlen(Buffer)-1] ==
'\r' )
250 Buffer[
strlen(Buffer)-1] = 0;
253 if ( uTruth != uTruth2 )
254 printf(
"Verification failed in line %d: %s\n", nLines, Buffer ), nFails++;
257 printf(
"Verification succeeded for %d functions and failed for %d functions.\n", nLines-nFails, nFails );
261 char * pFileName =
"lib4var.txt";
281 FILE * pFile = fopen( pFileName,
"rb" );
283 p->pName = Abc_UtilStrsav(
"func_enum_aig" );
285 for ( i = 0; i < 5; i++ )
286 Gia_ManAppendCi(
p );
287 while ( fgets( Buffer, 1000, pFile ) )
289 if ( Buffer[
strlen(Buffer)-1] ==
'\n' )
290 Buffer[
strlen(Buffer)-1] = 0;
291 if ( Buffer[
strlen(Buffer)-1] ==
'\r' )
292 Buffer[
strlen(Buffer)-1] = 0;
296 printf(
"Finish constructing AIG for %d structures.\n", nLines );
316 FILE * pFile = fopen( pFileName,
"rb" );
317 if (pFile == NULL)
return NULL;
319 RetValue = pFile ? fread(
p,
sizeof(
word), nSizeW, pFile ) : 0;
323 printf(
"Finished reading file \"%s\".\n", pFileName );
327 printf(
"Cannot open input file \"%s\".\n", pFileName );
328 Abc_PrintTime( 1,
"File reading", Abc_Clock() - clk );
333 unsigned i, Limit = 1 << ((1 << nVars)-1), Count = 0;
334 for ( i = 0; i < Limit; i++ )
335 if ( pTable[i] == i )
340 pTable[i] = pTable[pTable[i]];
342 printf(
"The total number of NPN classes = %d.\n", Count );
348 unsigned * pTable = NULL;
349 int nSizeLog = (1<<nVars) -2;
350 int nSizeW = 1 << nSizeLog;
352 sprintf( pFileName,
"tableW%d.data", nSizeLog );
376 unsigned Truth = Truth2 &
p->CmpMask ? ~Truth2 : Truth2;
377 unsigned Class =
p->pTable[Truth &
p->FunMask];
378 assert( Class < (
unsigned)
p->nClasses );
379 if (
p->pNodes[Class] < n )
381 assert(
p->pNodes[Class] == n );
382 if (
p->pVisited[Class] )
384 p->pVisited[Class] = 1;
385 Vec_IntPush(
p->vVisited, Class );
393 p->pVisited[Class] = 0;
396 Vec_IntClear(
p->vVisited );
415 p->nComps = 1 << nVars;
419 p->vFanins = Vec_IntAlloc( 2*617000 );
420 p->vTruths = Vec_IntAlloc( 617000 );
421 p->vConfigs = Vec_IntAlloc( 617000 );
422 p->vClasses = Vec_IntAlloc( 617000 );
423 p->vTruthNpns = Vec_IntAlloc( 617000 );
424 p->vFunNodes = Vec_WecStart( 16 );
425 p->vTemp = Vec_IntAlloc( 4000 );
426 p->vTemp2 = Vec_IntAlloc( 4000 );
427 p->FunMask = nVars == 5 ? ~0 : (nVars == 4 ? 0xFFFF : 0xFF);
428 p->CmpMask = nVars == 5 ? 1 << 31 : (nVars == 4 ? 1 << 15 : 1 << 7);
431 p->vUsedBins = Vec_IntAlloc( 4000 );
432 if ( !fMulti )
return p;
437 p->vVisited = Vec_IntAlloc( 1000 );
442 Vec_IntFreeP( &
p->vVisited );
447 Vec_IntFreeP( &
p->vFanins );
448 Vec_IntFreeP( &
p->vTruths );
449 Vec_IntFreeP( &
p->vConfigs );
450 Vec_IntFreeP( &
p->vClasses );
451 Vec_IntFreeP( &
p->vTruthNpns );
452 Vec_WecFreeP( &
p->vFunNodes );
453 Vec_IntFreeP( &
p->vTemp );
454 Vec_IntFreeP( &
p->vTemp2 );
455 Vec_IntFreeP( &
p->vUsedBins );
474static inline unsigned Dtt_ManHashKey(
Dtt_Man_t *
p,
unsigned Truth )
476 static unsigned s_P[4] = { 1699, 5147, 7103, 8147 };
477 unsigned char * pD = (
unsigned char*)&Truth;
478 return pD[0] * s_P[0] + pD[1] * s_P[1] + pD[2] * s_P[2] + pD[3] * s_P[3];
482 unsigned Hash = Dtt_ManHashKey(
p, Truth);
483 unsigned * pSpot =
p->pBins + (Hash &
p->BinMask);
484 for ( ; ~*pSpot; Hash++, pSpot =
p->pBins + (Hash &
p->BinMask) )
485 if ( *pSpot == Truth )
487 Vec_IntPush(
p->vUsedBins, pSpot -
p->pBins );
495 Vec_IntClear( vFuns );
496 for ( i = 0; i <
p->nPerms; i++ )
498 for ( k = 0; k <
p->nComps; k++ )
501 unsigned tTemp = (unsigned)(tCur &
p->CmpMask ? ~tCur : tCur);
503 Vec_IntPush( vFuns, tTemp );
504 tCur = Abc_Tt6Flip( tCur,
p->pComps[k] );
506 tCur = Abc_Tt6SwapAdjacent( tCur,
p->pPerms[i] );
511 p->pBins[Entry] = ~0;
512 Vec_IntClear(
p->vUsedBins );
528static inline int Dtt_ManGetFun(
Dtt_Man_t *
p,
unsigned tFun,
int n )
531 tFun = tFun &
p->CmpMask ? ~tFun : tFun;
533 if ( !Abc_TtGetBit(
p->pPres, tFun &
p->FunMask ) )
return 0;
534 if (
p->pTable == NULL )
return 1;
536 Class =
p->pTable[tFun &
p->FunMask];
537 assert( Class < (
unsigned)
p->nClasses );
538 if (
p->pNodes[Class] < n )
540 assert(
p->pNodes[Class] == n );
541 if (
p->pVisited[Class] )
546static inline void Dtt_ManSetFun(
Dtt_Man_t *
p,
unsigned tFun )
548 tFun = tFun &
p->CmpMask ? ~tFun : tFun;
550 Abc_TtSetBit(
p->pPres, tFun &
p->FunMask );
555 unsigned Min = Vec_IntFindMin( vFuncs );
556 int i, nObjs = Vec_IntSize(
p->vFanins)/2;
557 int nNodesI = 0xF & (Vec_IntEntry(
p->vConfigs, FanI) >> 3);
558 int nNodesJ = 0xF & (Vec_IntEntry(
p->vConfigs, FanJ) >> 3);
559 int nNodes = nNodesI + nNodesJ + 1;
560 assert( nObjs == Vec_IntSize(
p->vTruths) );
561 assert( nObjs == Vec_IntSize(
p->vConfigs) );
562 assert( nObjs == Vec_IntSize(
p->vClasses) );
563 Vec_WecPush(
p->vFunNodes, n, nObjs );
564 Vec_IntPushTwo(
p->vFanins, FanI, FanJ );
565 Vec_IntPush(
p->vTruths, Truth );
566 Vec_IntPush(
p->vConfigs, (nNodes << 3) | Type );
567 Vec_IntPush(
p->vClasses, Vec_IntSize(
p->vTruthNpns) );
568 Vec_IntPush(
p->vTruthNpns, Min );
570 Dtt_ManSetFun(
p, Min );
574 if (
p->pTable == NULL )
576 Truth = Truth &
p->CmpMask ? ~Truth : Truth;
579 p->pNodes[
p->pTable[Truth]] = n;
584 int nNew = Vec_IntSize(Vec_WecEntry(vFunNodes, nNodes));
585 printf(
"%c =%2d | ", fDelay ?
'D':
'N', nNodes );
586 printf(
"C =%12.0f | ", (
double)(
iword)nSteps );
587 printf(
"New%d =%10d ", nVars, nNew + (
int)(nNodes==0) );
588 printf(
"All%d =%10d | ", nVars, Vec_WecSizeSize(vFunNodes)+1 );
589 printf(
"Multi =%10d | ", (
int)nMultis );
590 Abc_PrintTime( 1,
"Time", Abc_Clock() - clk );
598 printf(
"NPN classes for each node count (N):\n" );
599 for ( i = 0; i < 32; i++ )
601 printf(
"N = %2d : NPN = %6d\n", i,
p->Counts[i] );
606 for ( n = 0; n <= 7; n++ )
608 printf(
"n=%d : ", n);
609 for ( i = 0; i <
p->nClasses; i++ )
610 if (
p->pNodes[i] == n )
611 printf(
"%d ",
p->pTimes[i] );
617 int i, n, Entry, Count, Prev;
618 for ( n = 0; n < 16; n++ )
620 Vec_Int_t * vTimes = Vec_IntAlloc( 100 );
622 for ( i = 0; i <
p->nClasses; i++ )
623 if (
p->pNodes[i] == n )
624 Vec_IntPush( vTimes,
p->pTimes[i] );
625 if ( Vec_IntSize(vTimes) == 0 )
631 Vec_IntSort( vTimes, 0 );
633 Prev = Vec_IntEntry( vTimes, 0 );
640 Vec_IntPushTwo( vUsed, Prev, Count );
645 Vec_IntPushTwo( vUsed, Prev, Count );
646 printf(
"n=%d : ", n);
648 printf(
"%d=%d ", Prev, Entry );
650 Vec_IntFree( vTimes );
651 Vec_IntFree( vUsed );
656 int n, Counts[13][15] = {{0}};
657 for ( n = 0; n < 13; n++ )
659 int i, Total = 0, Count = 0;
660 for ( i = 0; i <
p->nClasses; i++ )
661 if (
p->pNodes[i] == n )
663 int Log = Abc_Base2Log(
p->pTimes[i]);
665 if (
p->pTimes[i] < 2 )
669 Total +=
p->pTimes[i];
674 printf(
"n=%2d : ", n );
675 printf(
"All = %7d ", Count );
676 printf(
"Ave = %6.2f ", 1.0*Total/Count );
677 for ( i = 0; i < 15; i++ )
679 printf(
"%6d", Counts[n][i] );
710 for ( i = 0; i < 5; i++ )
717 sprintf( str,
"[%08x(%03d),%d%d%d%d%d,%d%d%d%d%d]", Vec_IntEntry( vLibFun, FI ), FI, P[0], P[1], P[2], P[3], P[4], N[0], N[1], N[2], N[3], N[4] );
726 case 0:
sprintf( str,
"(%s&%s)", sFI1, sFI2 );
break;
727 case 1:
sprintf( str,
"(~%s&%s)", sFI1, sFI2 );
break;
728 case 2:
sprintf( str,
"(%s&~%s)", sFI1, sFI2 );
break;
729 case 3:
sprintf( str,
"~(~%s&~%s)", sFI1, sFI2 );
break;
730 case 4:
sprintf( str,
"(%s^%s)", sFI1, sFI2 );
break;
731 case 5:
sprintf( str,
"~(%s&%s)", sFI1, sFI2 );
break;
732 case 6:
sprintf( str,
"~(~%s&%s)", sFI1, sFI2 );
break;
733 case 7:
sprintf( str,
"~(%s&~%s)", sFI1, sFI2 );
break;
734 case 8:
sprintf( str,
"(~%s&~%s)", sFI1, sFI2 );
break;
735 case 9:
sprintf( str,
"~(%s^%s)", sFI1, sFI2 );
break;
753 for ( i = 0; i < 5; i++ )
755 NP |= ( ( NP1 >> ((NP2&0x7)<<2) ) & 0x7 ) << (i<<2);
756 NP |= ( ( NP1 >> ((NP2&0x7)<<2) ^ NP2 ) & 0x8 ) << (i<<2);
766 for ( i = 0; i < 5; i++ )
768 if ( ( NP & 0x7 ) == 0 )
786 char sFI2[100] = {0};
788 if ( pFun->
FI2 == 0 )
793 fprintf(pFile,
"%08x = %s\n", tFun, sF);
802 fprintf(pFile,
"%08x = %s\n", tFun, sF);
811 char sFI1[100], sCopy[100] = {0};
813 if ( pFun->
FI1 == 0 )
835 *Type += (*Type<5)? 5: -5;
836 else if ( *Type == 0 || *Type == 5 )
838 else if ( *Type == nFanin )
840 else if ( *Type + nFanin == 3 )
842 else if ( *Type == 3 )
843 *Type = (nFanin==1)? 7: 6;
844 else if ( *Type == 4 )
846 else if ( *Type == nFanin+5 )
848 else if ( *Type + nFanin == 8 )
850 else if ( *Type == 8 )
851 *Type = (nFanin==1)? 2: 1;
852 else if ( *Type == 9 )
858int Dtt_Check(
unsigned tFun,
unsigned tGoal,
unsigned tCur,
int* pType )
861 return ( tCur == tFun || ~tCur == tFun );
867 case 0:
case 5:
if ( (~tCur & tFun) == tGoal ) {
Dtt_ProcessType( pType, 1 );
return 1; }
868 else return ( (tCur & tFun) == tGoal );
869 case 1:
case 6:
if ( (tCur & tFun) == tGoal ) {
Dtt_ProcessType( pType, 1 );
return 1; }
870 else return ( (~tCur & tFun) == tGoal );
871 case 2:
case 7:
if ( (~tCur & ~tFun) == tGoal ) {
Dtt_ProcessType( pType, 1 );
return 1; }
872 else return ( (tCur & ~tFun) == tGoal );
873 case 3:
case 8:
if ( (~tCur | tFun) == tGoal ) {
Dtt_ProcessType( pType, 1 );
return 1; }
874 else return ( (tCur | tFun) == tGoal );
875 case 4:
case 9:
if ( (~tCur ^ tFun) == tGoal ) {
Dtt_ProcessType( pType, 1 );
return 1; }
876 else return ( (tCur ^ tFun) == tGoal );
885 int P[5] = { 0, 1, 2, 3, 4 };
886 int N[5] = { 0, 0, 0, 0, 0 };
890 for ( i = 0; i <
p->nPerms; i++ )
892 for ( k = 0; k <
p->nComps; k++ )
894 if (
Dtt_Check( tFun, tGoal, (
unsigned)tCur, pType ))
896 if ( !tGoal && ( tFun == (
unsigned)~tCur ) )
904 for ( j = 0; j < 5; j++ )
905 *NP |= ( ( ( N[j] & 0x1 ) << 3 ) | ( P[j] & 0x7 ) ) << (j<<2) ;
909 for ( j = 0; j < 5; j++ )
911 *NP |= P[NPout&0x7] << (j<<2);
912 *NP |= ( N[NPout&0x7] ^ ( (NPout>>3) & 0x1 )) << (j<<2) << 3;
919 tCur = Abc_Tt6Flip( tCur,
p->pComps[k] );
920 N[
p->pComps[k]] ^= 0x1;
922 tCur = Abc_Tt6SwapAdjacent( tCur,
p->pPerms[i] );
923 temp = P[
p->pPerms[i]]; P[
p->pPerms[i]] = P[
p->pPerms[i]+1]; P[
p->pPerms[i]+1] = temp;
931 char str[100], sFI1[50], sFI2[50];
932 int i, j, Entry, fRepeat;
934 Vec_Int_t * vLibFun = Vec_IntDup(
p->vTruthNpns );
936 Vec_IntUniqify( vLibFun );
937 vLibImpl = Vec_VecStart( Vec_IntSize( vLibFun ) );
940 int NP, Fanin2, Fanin1Npn, Fanin2Npn;
943 pFun->
Type = (int)( 0x7 & Vec_IntEntry(
p->vConfigs, i) );
945 Fanin2 = Vec_IntEntry(
p->vTruths, Vec_IntEntry(
p->vFanins, i*2+1 ) );
946 Fanin1Npn = Vec_IntEntry(
p->vTruthNpns, Vec_IntEntry(
p->vFanins, i*2 ) );
947 Fanin2Npn = Vec_IntEntry(
p->vTruthNpns, Vec_IntEntry(
p->vFanins, i*2+1 ) );
948 pFun->
FI1 = Vec_IntFind( vLibFun, Fanin1Npn );
949 pFun->
FI2 = Vec_IntFind( vLibFun, Fanin2Npn );
954 if ( ( pFun2->
FI1 == pFun->
FI1 && pFun2->
FI2 == pFun->
FI2 ) || ( pFun2->
FI2 == pFun->
FI1 && pFun2->
FI1 == pFun->
FI2 ) )
966 Dtt_FindNP(
p, Vec_IntEntry(
p->vTruthNpns, i ), 0, Entry, &NP, &(pFun->
Type), 0 );
970 Vec_VecPush( vLibImpl, Vec_IntFind( vLibFun, Vec_IntEntry(
p->vTruthNpns, i ) ), pFun );
974 pFile = fopen( FileName,
"wb" );
979 if (!Entry)
continue;
980 fprintf( pFile,
"%08x: ", (
unsigned)Entry );
986 fprintf( pFile,
"%s, ", str );
988 fprintf( pFile,
"\n" );
998 Dtt_MakeFormula( (
unsigned)Entry, pFun, vLibImpl, (4<<16)+(3<<12)+(2<<8)+(1<<4), str, 1, pFile );
1003 printf(
"Dumped file \"%s\". \n", FileName );
1007void Dtt_EnumerateLf(
int nVars,
int nNodeMax,
int fDelay,
int fMulti,
int fVerbose,
char* pFileName )
1009 abctime clk = Abc_Clock();
word nSteps = 0, nMultis = 0;
1013 Vec_IntPushTwo(
p->vFanins, 0, 0 );
1014 Vec_IntPush(
p->vTruths, 0 );
1015 Vec_IntPush(
p->vConfigs, 0 );
1016 Vec_IntPush(
p->vClasses, Vec_IntSize(
p->vTruthNpns) );
1017 Vec_IntPush(
p->vTruthNpns, 0 );
1018 Dtt_ManSetFun(
p, 0 );
1020 Vec_WecPush(
p->vFunNodes, 0, Vec_IntSize(
p->vFanins)/2 );
1021 Vec_IntPushTwo(
p->vFanins, 0, 0 );
1022 Vec_IntPush(
p->vTruths, (
unsigned)s_Truths6[0] );
1023 Vec_IntPush(
p->vConfigs, 0 );
1024 Vec_IntPush(
p->vClasses, Vec_IntSize(
p->vTruthNpns) );
1025 Vec_IntPush(
p->vTruthNpns, (
unsigned)s_Truths6[0] );
1026 for ( i = 0; i < nVars; i++ )
1027 Dtt_ManSetFun(
p, (
unsigned)s_Truths6[i] );
1031 for ( n = 1; n <= nNodeMax; n++ )
1033 for ( i = 0, j = n - 1; i < n; i++, j = j - 1 + fDelay )
if ( i <= j )
1035 Vec_Int_t * vFaninI = Vec_WecEntry(
p->vFunNodes, i );
1036 Vec_Int_t * vFaninJ = Vec_WecEntry(
p->vFunNodes, j );
1037 int k, i0, j0, EntryI, EntryJ;
1040 unsigned TruthI = Vec_IntEntry(
p->vTruths, EntryI);
1042 int Start = i == j ? i0 : 0;
1045 unsigned Truth, TruthJ = Vec_IntEntry(
p->vTruths, EntryJ);
1048 if ( !Dtt_ManGetFun(
p, TruthJ & Truth, n) )
1050 if ( !Dtt_ManGetFun(
p, TruthJ & ~Truth, n) )
1052 if ( !Dtt_ManGetFun(
p, ~TruthJ & Truth, n) )
1054 if ( !Dtt_ManGetFun(
p, TruthJ | Truth, n) )
1056 if ( !Dtt_ManGetFun(
p, TruthJ ^ Truth, n) )
1071 if (
Dtt_PrintStats(n, nVars,
p->vFunNodes, nSteps, clk, fDelay, nMultis) == 0 )
1078 if ( !fDelay && pFileName!=NULL )
#define ABC_FALLOC(type, num)
#define ABC_CALLOC(type, num)
#define ABC_CONST(number)
PARAMETERS ///.
#define ABC_NAMESPACE_IMPL_START
#define ABC_NAMESPACE_IMPL_END
typedefABC_NAMESPACE_IMPL_START struct Vec_Int_t_ Vec_Int_t
DECLARATIONS ///.
Gia_Man_t * Dau_ParseFormulaAigTest()
word Dau_ParseFormula_rec(char *pBeg, char *pEnd)
unsigned * Dau_ReadFile2(char *pFileName, int nSizeW)
void Dtt_EnumerateLf(int nVars, int nNodeMax, int fDelay, int fMulti, int fVerbose, char *pFileName)
void Dtt_ManRenum(int nVars, unsigned *pTable, int *pnClasses)
void Dtt_PrintMulti(Dtt_Man_t *p)
void Dtt_FunImplFI2Str(int FI, int NP, Vec_Int_t *vLibFun, char *str)
void Dtt_ManAddVisited(Dtt_Man_t *p, unsigned Truth2, int n)
int Dau_ParseFormulaAig(Gia_Man_t *p, char *pStr)
int Dtt_Check(unsigned tFun, unsigned tGoal, unsigned tCur, int *pType)
int Dtt_ComposeNP(int NP1, int NP2)
void Dau_VerifyFile(char *pFileName)
Dtt_Man_t * Dtt_ManAlloc(int nVars, int fMulti)
unsigned * Dtt_ManLoadClasses(int nVars, int *pnClasses)
void Dtt_FunImpl2Str(int Type, char *sFI1, char *sFI2, char *str)
struct Dtt_FunImpl_t_ Dtt_FunImpl_t
void Dau_VerifyFileTest()
int Dau_ParseFormulaAig_rec(Gia_Man_t *p, char *pBeg, char *pEnd)
int Dtt_PrintStats(int nNodes, int nVars, Vec_Wec_t *vFunNodes, word nSteps, abctime clk, int fDelay, word nMultis)
char * Dau_ParseFormulaEndToken(char *pForm)
FUNCTION DEFINITIONS ///.
int Dtt_ManCheckHash(Dtt_Man_t *p, unsigned Truth)
void Dtt_MakePI(int NP, char *str)
void Dtt_ProcessType(int *Type, int nFanin)
void Dtt_PrintMulti1(Dtt_Man_t *p)
void Dtt_MakeFormulaFI2(unsigned tFun, Dtt_FunImpl_t *pFun, Vec_Vec_t *vLibImpl, int NP, char *sFI1, char *sF, int fPrint, FILE *pFile)
void Dtt_DumpLibrary(Dtt_Man_t *p, char *FileName)
void Dtt_ManAddFunction(Dtt_Man_t *p, int n, int FanI, int FanJ, int Type, unsigned Truth)
typedefABC_NAMESPACE_IMPL_START struct Dtt_Man_t_ Dtt_Man_t
DECLARATIONS ///.
void Dtt_ManProcessVisited(Dtt_Man_t *p)
void Dtt_ManFree(Dtt_Man_t *p)
void Dtt_MakeFormula(unsigned tFun, Dtt_FunImpl_t *pFun, Vec_Vec_t *vLibImpl, int NP, char *sF, int fPrint, FILE *pFile)
void Dtt_PrintMulti2(Dtt_Man_t *p)
void Dtt_PrintDistrib(Dtt_Man_t *p)
void Dau_ParseFormulaTest()
void Dtt_FindNP(Dtt_Man_t *p, unsigned tFun, unsigned tGoal, unsigned tNpn, int *NP, int *pType, int NPout)
Vec_Int_t * Dtt_ManCollect(Dtt_Man_t *p, unsigned Truth, Vec_Int_t *vFuns)
Gia_Man_t * Dau_ConstructAigFromFile(char *pFileName)
word Dau_ParseFormula(char *p)
ABC_NAMESPACE_IMPL_START void Dau_TruthEnum(int nVars)
DECLARATIONS ///.
void Gia_ManHashAlloc(Gia_Man_t *p)
Gia_Man_t * Gia_ManStart(int nObjsMax)
FUNCTION DEFINITIONS ///.
int Gia_ManHashXor(Gia_Man_t *p, int iLit0, int iLit1)
struct Gia_Man_t_ Gia_Man_t
int Gia_ManHashAnd(Gia_Man_t *p, int iLit0, int iLit1)
unsigned __int64 word
DECLARATIONS ///.
#define Vec_IntForEachEntryDouble(vVec, Entry1, Entry2, i)
#define Vec_IntForEachEntry(vVec, Entry, i)
MACRO DEFINITIONS ///.
#define Vec_IntForEachEntryStart(vVec, Entry, i, Start)
#define Vec_VecForEachEntryLevel(Type, vGlob, pEntry, i, Level)
typedefABC_NAMESPACE_HEADER_START struct Vec_Vec_t_ Vec_Vec_t
INCLUDES ///.
typedefABC_NAMESPACE_HEADER_START struct Vec_Wec_t_ Vec_Wec_t
INCLUDES ///.