68static inline int Ifd_ObjIsVar(
Ifd_Obj_t *
p ) {
return p->Type == 0; }
69static inline int Ifd_ObjIsAnd(
Ifd_Obj_t *
p ) {
return p->Type == 1; }
70static inline int Ifd_ObjIsXor(
Ifd_Obj_t *
p ) {
return p->Type == 2; }
71static inline int Ifd_ObjIsMux(
Ifd_Obj_t *
p ) {
return p->Type == 3; }
74static inline Ifd_Obj_t * Ifd_ManObjFromLit(
Ifd_Man_t *
p,
int iLit ) {
return Ifd_ManObj(
p, Abc_Lit2Var(iLit) ); }
75static inline int Ifd_ObjId(
Ifd_Man_t *
p,
Ifd_Obj_t * pObj ) {
assert( pObj -
p->pObjs >= 0 && pObj -
p->pObjs <
p->nObjs );
return pObj -
p->pObjs; }
76static inline int Ifd_LitSuppSize(
Ifd_Man_t *
p,
int iLit ) {
return iLit > 0 ? Ifd_ManObjFromLit(
p, iLit)->nSupp : 0; }
77static inline int Ifd_LitNumAnds(
Ifd_Man_t *
p,
int iLit ) {
return iLit > 0 ? Ifd_ManObjFromLit(
p, iLit)->nAnds : 0; }
79#define Ifd_ManForEachNodeWithSupp( p, nVars, pLeaf, i ) \
80 for ( i = Vec_IntEntry(p->vMarks, nVars); (i < Vec_IntEntry(p->vMarks, nVars+1)) && (pLeaf = Ifd_ManObj(p, i)); i++ )
102 p->nObjsAlloc = Abc_PrimeCudd( 50000000 );
106 (
p->pObjs + 1)->nSupp = 1;
107 (
p->pObjs + 1)->fWay = 1;
109 p->vArgs = Vec_IntAlloc( 4000 );
110 p->vRes = Vec_IntAlloc( 1000 );
111 p->vHash = Hsh_IntManStart(
p->vArgs, 4, 1000 );
112 p->vMarks = Vec_IntAlloc( 100 );
113 Vec_IntPush(
p->vMarks, 0 );
114 Vec_IntPush(
p->vMarks, 1 );
115 Vec_IntPush(
p->vMarks,
p->nObjs );
117 p->vSuper = Vec_IntAlloc( 1000 );
118 p->vTruths = Vec_WrdAlloc( 1000 );
119 p->vClauses = Vec_IntAlloc( 1000 );
124 int i, This, Prev = 0;
127 printf(
"%d(%d:%d) ", i-1, This, This - Prev );
132 Vec_IntFreeP( &
p->vArgs );
133 Vec_IntFreeP( &
p->vRes );
134 Vec_WrdFreeP( &
p->vTruths );
135 Vec_IntFreeP( &
p->vClauses );
136 Vec_IntFreeP( &
p->vMarks );
137 Hsh_IntManStop(
p->vHash );
138 Vec_IntFreeP( &
p->vSuper );
156 char Symb[2][4] = { {
'?',
'(',
'[',
'<'}, {
'?',
')',
']',
'>'} };
158 if ( Abc_LitIsCompl(iLit) )
159 printf(
"!" ), iLit = Abc_LitNot(iLit);
161 { printf(
"%c",
'a' + (*pCounter)++ );
return; }
162 pDsd = Ifd_ManObjFromLit(
p, iLit );
164 printf(
"%c", Symb[0][pDsd->Type] );
165 Ifd_ObjPrint_rec(
p, pDsd->pFans[0], pCounter, pDsd->Type == 3 || Abc_LitIsCompl(pDsd->pFans[0]) || pDsd->Type != Ifd_ManObjFromLit(
p, pDsd->pFans[0])->Type );
166 Ifd_ObjPrint_rec(
p, pDsd->pFans[1], pCounter, pDsd->Type == 3 || Abc_LitIsCompl(pDsd->pFans[1]) || pDsd->Type != Ifd_ManObjFromLit(
p, pDsd->pFans[1])->Type );
167 if ( pDsd->pFans[2] != -1 )
168 Ifd_ObjPrint_rec(
p, pDsd->pFans[2], pCounter, pDsd->Type == 3 || Abc_LitIsCompl(pDsd->pFans[2]) || pDsd->Type != Ifd_ManObjFromLit(
p, pDsd->pFans[2])->Type );
170 printf(
"%c", Symb[1][pDsd->Type] );
176 { printf(
"0" );
return; }
178 { printf(
"1" );
return; }
184 for ( i = 0; i <
p->nObjs; i++ )
186 printf(
"%4d : ", i );
194 for ( i = 0; i <
p->nObjs; i++ )
196 word Fun = Vec_WrdEntry(
p->vTruths, i );
199 printf(
"%2d, ", Ifd_LitNumAnds(
p, Abc_Var2Lit(i, 0)) );
200 printf(
"%2d, ", Vec_IntEntry(
p->vClauses, i) );
201 printf(
"ABC_CONST(" );
205 printf(
"\" }, // %4d \n", i );
223 static word s_Truths6[6] = {
232 word Fun0, Fun1, Fun2 = 0;
233 assert( !Abc_LitIsCompl(iLit) );
235 return s_Truths6[(*pCounter)++];
236 pDsd = Ifd_ManObjFromLit(
p, iLit );
240 if ( pDsd->pFans[2] != -1 )
243 Fun0 = Abc_LitIsCompl(pDsd->pFans[0]) ? ~Fun0 : Fun0;
244 Fun1 = Abc_LitIsCompl(pDsd->pFans[1]) ? ~Fun1 : Fun1;
245 if ( pDsd->pFans[2] != -1 )
246 Fun2 = Abc_LitIsCompl(pDsd->pFans[2]) ? ~Fun2 : Fun2;
248 if ( pDsd->Type == 1 )
250 if ( pDsd->Type == 2 )
252 if ( pDsd->Type == 3 )
253 return (Fun2 & Fun1) | (~Fun2 & Fun0);
266 return Abc_LitIsCompl(iLit) ? ~Fun : Fun;
272 assert( Vec_WrdSize(
p->vTruths) == 0 );
273 for ( i = 0; i <
p->nObjs; i++ )
276 Vec_WrdPush(
p->vTruths, Fun );
295 Vec_StrClear( vCnf );
296 if ( Truth == 0 || ~Truth == 0 )
299 Vec_StrPush( vCnf, (
char)(Truth == 0) );
300 Vec_StrPush( vCnf, (
char)-1 );
305 int i, k, c, RetValue, Literal,
Cube, nCubes = 0;
307 for ( c = 0; c < 2; c ++ )
309 Truth = c ? ~Truth : Truth;
310 RetValue =
Kit_TruthIsop( (
unsigned *)&Truth, nVars, vCover, 0 );
312 nCubes += Vec_IntSize( vCover );
315 for ( k = 0; k < nVars; k++ )
317 Literal = 3 & (
Cube >> (k << 1));
319 Vec_StrPush( vCnf, (
char)Abc_Var2Lit(k, 0) );
320 else if ( Literal == 2 )
321 Vec_StrPush( vCnf, (
char)Abc_Var2Lit(k, 1) );
322 else if ( Literal != 0 )
325 Vec_StrPush( vCnf, (
char)Abc_Var2Lit(nVars, c) );
326 Vec_StrPush( vCnf, (
char)-1 );
334 Vec_Int_t * vCover = Vec_IntAlloc( 1 << 16 );
338 assert( Vec_IntSize(
p->vClauses) == 0 );
341 Vec_IntFree( vCover );
359 assert( iDsdC != -1 || iDsd0 >= iDsd1 );
360 assert( iDsdC == -1 || !Abc_LitIsCompl(iDsd1) );
365 return *Hsh_IntManLookup(
p->vHash, (
unsigned *)pData );
370 assert( iDsdC != -1 || iDsd0 >= iDsd1 );
371 assert( iDsdC == -1 || !Abc_LitIsCompl(iDsd1) );
372 Vec_IntPush(
p->vArgs, iDsd0 );
373 Vec_IntPush(
p->vArgs, iDsd1 );
374 Vec_IntPush(
p->vArgs, iDsdC );
375 Vec_IntPush(
p->vArgs, Type );
376 iObj = Hsh_IntManAdd(
p->vHash, Vec_IntSize(
p->vRes) );
377 assert( iObj == Vec_IntSize(
p->vRes) );
378 Vec_IntPush(
p->vRes, Res );
379 assert( 4 * Vec_IntSize(
p->vRes) == Vec_IntSize(
p->vArgs) );
385 assert( iDsdC != -1 || iDsd0 >= iDsd1 );
386 assert( iDsdC == -1 || !Abc_LitIsCompl(iDsd1) );
387 Vec_IntPush(
p->vArgs, iDsd0 );
388 Vec_IntPush(
p->vArgs, iDsd1 );
389 Vec_IntPush(
p->vArgs, iDsdC );
390 Vec_IntPush(
p->vArgs, Type );
391 Value = Hsh_IntManAdd(
p->vHash, Vec_IntSize(
p->vRes) );
392 if ( Value < Vec_IntSize(
p->vRes) )
394 iObj = Vec_IntEntry(
p->vRes, Value);
395 Vec_IntShrink(
p->vArgs, Vec_IntSize(
p->vArgs) - 4 );
396 pObj = Ifd_ManObj(
p, iObj );
398 assert( (
int)pObj->Type == Type );
399 assert( (
int)pObj->nSupp == Ifd_LitSuppSize(
p, iDsd0) + Ifd_LitSuppSize(
p, iDsd1) + Ifd_LitSuppSize(
p, iDsdC) );
403 if (
p->nObjs ==
p->nObjsAlloc )
404 printf(
"The number of nodes is more than %d\n",
p->nObjs );
407 pObj = Ifd_ManObj(
p,
p->nObjs++ );
409 pObj->nSupp = Ifd_LitSuppSize(
p, iDsd0) + Ifd_LitSuppSize(
p, iDsd1) + Ifd_LitSuppSize(
p, iDsdC);
410 pObj->nAnds = Ifd_LitNumAnds(
p, iDsd0) + Ifd_LitNumAnds(
p, iDsd1) + Ifd_LitNumAnds(
p, iDsdC) + ((Type == 1) ? 1 : 3);
414 else if ( Type == 2 )
415 pObj->fWay = Ifd_ManObjFromLit(
p, iDsd0)->fWay || Ifd_ManObjFromLit(
p, iDsd1)->fWay;
416 else if ( Type == 3 )
418 pObj->fWay = (Ifd_ManObjFromLit(
p, iDsd0)->fWay && Ifd_ManObjFromLit(
p, iDsd1)->fWay) || (iDsd0 == Abc_LitNot(iDsd1) && Ifd_ManObjFromLit(
p, iDsdC)->fWay);
420 pObj->pFans[0] = iDsd0;
421 pObj->pFans[1] = iDsd1;
422 pObj->pFans[2] = iDsdC;
423 Vec_IntPush(
p->vRes, iObj );
425 assert( 4 * Vec_IntSize(
p->vRes) == Vec_IntSize(
p->vArgs) );
430 Ifd_Obj_t * pDsd = Ifd_ManObjFromLit(
p, iLit );
431 if ( Abc_LitIsCompl(iLit) || (
int)pDsd->Type != Type )
432 Vec_IntPush( vObjs, iLit );
441 int i, iLit0, iLit1, iThis, fCompl = 0;
444 if ( iDsd0 == 0 || iDsd1 == 0 )
446 if ( iDsd0 == 1 || iDsd1 == 1 )
447 return (iDsd0 == 1) ? iDsd1 : iDsd0;
449 else if ( Type == 2 )
452 return Abc_LitNotCond( iDsd1, iDsd0 );
454 return Abc_LitNotCond( iDsd0, iDsd1 );
455 if ( Abc_LitIsCompl(iDsd0) )
456 fCompl ^= 1, iDsd0 = Abc_LitNot(iDsd0);
457 if ( Abc_LitIsCompl(iDsd1) )
458 fCompl ^= 1, iDsd1 = Abc_LitNot(iDsd1);
460 else if ( Type == 3 )
462 if ( Abc_LitIsCompl(iDsdC) )
465 iDsdC = Abc_LitNot(iDsdC);
467 if ( Abc_LitIsCompl(iDsd1) )
468 fCompl ^= 1, iDsd0 = Abc_LitNot(iDsd0), iDsd1 = Abc_LitNot(iDsd1);
470 assert( iDsd0 > 1 && iDsd1 > 1 && Type >= 1 && Type <= 3 );
481 return Abc_Var2Lit( iThis, fCompl );
484 Vec_IntClear(
p->vSuper );
487 Vec_IntSort(
p->vSuper, 1 );
488 iLit0 = Vec_IntEntry(
p->vSuper, 0 );
491 assert( !Abc_LitIsCompl(iLit0) );
495 return Abc_LitNotCond( iLit0, fCompl );
515 if ( **
p >=
'a' && **
p <=
'f' )
517 assert( **
p -
'a' >= 0 && **
p -
'a' < 6 );
518 return Abc_Var2Lit( 1, fCompl );
522 char * q = pStr + pMatches[ *
p - pStr ];
524 assert( **
p ==
'(' && *q ==
')' );
525 for ( (*
p)++; *
p < q; (*p)++ )
531 return Abc_LitNotCond( Res, fCompl );
535 char * q = pStr + pMatches[ *
p - pStr ];
537 assert( **
p ==
'[' && *q ==
']' );
538 for ( (*
p)++; *
p < q; (*p)++ )
544 return Abc_LitNotCond( Res, fCompl );
548 int Temp[3], * pTemp = Temp, Res;
549 char * q = pStr + pMatches[ *
p - pStr ];
550 assert( **
p ==
'<' && *q ==
'>' );
552 for ( (*
p)++; *
p < q; (*p)++ )
554 assert( pTemp == Temp + 3 );
557 Res =
Ifd_ManOper( pMan, Temp[2], Temp[1], Temp[0], 3 );
558 return Abc_LitNotCond( Res, fCompl );
563#define IFM_MAX_STR 100
564#define IFM_MAX_VAR 16
570 for ( v = 0;
p[v]; v++ )
574 if (
p[v] ==
'(' ||
p[v] ==
'[' ||
p[v] ==
'<' ||
p[v] ==
'{' )
575 pNested[nNested++] = v;
576 else if (
p[v] ==
')' ||
p[v] ==
']' ||
p[v] ==
'>' ||
p[v] ==
'}' )
577 pMatches[pNested[--nNested]] = v;
586 if ( *
p ==
'0' && *(
p+1) == 0 )
588 else if ( *
p ==
'1' && *(
p+1) == 0 )
637 int v, i, j, k, c0, c1, c2;
638 for ( v = 2; v <= nVars; v++ )
641 for ( i = 1; i < v; i++ )
642 for ( j = 1; j < v; j++ )
648 assert( (
int)pLeaf0->nSupp == i );
649 assert( (
int)pLeaf1->nSupp == j );
650 Ifd_ManOper( pMan, Abc_Var2Lit(c0, 0), Abc_Var2Lit(c1, 0), -1, 1 );
652 Ifd_ManOper( pMan, Abc_Var2Lit(c0, 0), Abc_Var2Lit(c1, 1), -1, 1 );
654 Ifd_ManOper( pMan, Abc_Var2Lit(c0, 1), Abc_Var2Lit(c1, 0), -1, 1 );
655 if ( !pLeaf0->fWay && !pLeaf1->fWay )
656 Ifd_ManOper( pMan, Abc_Var2Lit(c0, 1), Abc_Var2Lit(c1, 1), -1, 1 );
657 Ifd_ManOper( pMan, Abc_Var2Lit(c0, 0), Abc_Var2Lit(c1, 0), -1, 2 );
662 for ( i = 1; i < v-1; i++ )
663 for ( j = 1; j < v-1; j++ )
664 for ( k = 1; k < v-1; k++ )
665 if ( i + j + k == v )
671 assert( (
int)pLeaf0->nSupp == i );
672 assert( (
int)pLeaf1->nSupp == j );
673 assert( (
int)pLeaf2->nSupp == k );
676 if ( pLeaf2->fWay && c0 < c1 )
678 Ifd_ManOper( pMan, Abc_Var2Lit(c0, 0), Abc_Var2Lit(c1, 0), Abc_Var2Lit(c2, 0), 3 );
679 if ( !pLeaf0->fWay && !pLeaf1->fWay )
680 Ifd_ManOper( pMan, Abc_Var2Lit(c0, 1), Abc_Var2Lit(c1, 0), Abc_Var2Lit(c2, 0), 3 );
709 for ( i = 0; i < size; i++ )
710 printf(
"%d", perm[i] );
715 Vec_Int_t * vGuide = Vec_IntAlloc( 100 );
716 int *array, *dir, tmp, tmp2, i, max;
717 array = (
int*)
malloc(
sizeof(
int) * n);
718 dir = (
int*)
calloc(n,
sizeof(
int));
719 for (i = 0; i < n; i++)
728 i = !dir[max] ? max - 1 : max + 1;
729 array[max] = array[i];
731 Vec_IntPush( vGuide, Abc_MinInt(max, i) );
734 for (i = 0; i < n; i++)
738 for (i = 0; i < n; i++)
739 if (((!dir[i] && i != 0 && array[i] > array[i-1]) || (dir[i] && i != n-1 && array[i] > array[i+1])) && (array[i] > array[max] || max == n))
744 Vec_IntPush( vGuide, 0 );
751 int pPerm[6] = { 0, 1, 2, 3, 4, 5 };
756 ABC_SWAP(
int, pPerm[Entry], pPerm[Entry+1] );
759 Vec_IntFree( vGuide );
778 static word PMasks[5][3] = {
786 return (t & PMasks[iVar][0]) | ((t & PMasks[iVar][1]) << (1 << iVar)) | ((t & PMasks[iVar][2]) >> (1 << iVar));
791 static word Truth6[6] = {
800 return ((t & ~Truth6[iVar]) << (1 << iVar)) | ((t & Truth6[iVar]) >> (1 << iVar));
805 int nSwaps = (1 << nVars);
806 Vec_Wrd_t * vTruths = Vec_WrdStart( nPerms * (1 << (nVars+1)) );
807 word tCur, tTemp1, tTemp2;
809 for ( i = 0; i < 2; i++ )
813 for (
p = 0;
p < nPerms;
p++ )
816 for ( c = 0; c < nSwaps; c++ )
818 Vec_WrdWriteEntry( vTruths, (
p << (nVars+1))|(i << nVars)|c, tCur );
838 int nSwaps = (1 << nVars);
839 Vec_Wrd_t * vTruths = Vec_WrdStart( nPerms * nSwaps );
840 word tCur = t, tTemp1, tTemp2;
844 for (
p = 0;
p < nPerms;
p++ )
849 for ( c = 0; c < nSwaps; c++ )
851 Vec_WrdWriteEntry( vTruths, (
p << nVars)|Config, tCur );
853 Config ^= (1 << pComp[c]);
884 int v,
Pos, Neg, Xor;
885 for ( v = 0; v < 6; v++ )
887 Neg = Abc_TtCountOnes( Abc_Tt6Cofactor0(uTruth, v) ) / 2;
888 Pos = Abc_TtCountOnes( Abc_Tt6Cofactor1(uTruth, v) ) / 2;
889 Xor = Abc_TtCountOnes( Abc_Tt6Cofactor0(uTruth, v) ^ Abc_Tt6Cofactor1(uTruth, v) ) / 2;
891 pCounts[v] = (
Pos << 20) | (Neg << 10) | Xor;
893 pCounts[v] = (Neg << 20) | (
Pos << 10) | Xor;
895 Vec_IntSelectSort( pCounts, 6 );
901 int i, v, pCounts[6];
907 printf(
"%5d : ", i );
908 for ( v = 0; v < 6; v++ )
909 printf(
"%2d %2d %2d ", (pCounts[v] >> 20) & 0xFF, (pCounts[v] >> 10) & 0xFF, (pCounts[v] >> 0) & 0xFF );
914 Vec_WrdFree( vTruths );
938 Vec_Wrd_t * vTruthRes = Vec_WrdAlloc( 4000000 );
939 Vec_Int_t * vConfgRes = Vec_IntAlloc( 4000000 );
940 int * pComp, * pPerm;
942 int i, k, Uniq, Runner, Counter = 0;
943 assert( nVars >= 3 && nVars <= 6 );
944 assert( Vec_WrdSize(vTruths) < (1<<10) );
945 vCompls = Vec_IntAlloc( 720 * 64 );
952 Vec_IntClear( vCompls );
955 Vec_IntPush( vCompls, (
int)(Variant & 1) );
956 Vec_WrdWriteEntry( vVariants, k, Variant & 1 ? ~Variant : Variant );
959 vUniques = Hsh_WrdManHashArray( vVariants, 1 );
962 if ( Runner == Uniq )
964 Variant = Vec_WrdEntry(vVariants, k);
965 assert( (Variant & 1) == 0 );
966 Vec_WrdPush( vTruthRes, Variant );
967 Vec_IntPush( vConfgRes, (i << 17)|(Vec_IntEntry(vCompls, k) << 16)|k );
970 Vec_IntUniqify( vUniques );
971 assert( Runner == Vec_IntSize(vUniques) );
972 Counter += Vec_IntSize(vUniques);
974 Vec_IntFree( vUniques );
975 Vec_WrdFree( vVariants );
977 Vec_IntFree( vCompls );
978 Vec_WrdFree( vTruths );
981 printf(
"Total = %d.\n", Counter );
982 assert( Vec_WrdSize(vTruthRes) == Counter );
984 sprintf( pFileName,
"dsdfuncs%d.dat", nVars );
985 pFile = fopen( pFileName,
"wb" );
986 fwrite( Vec_WrdArray(vTruthRes),
sizeof(
word), Vec_WrdSize(vTruthRes), pFile );
987 fwrite( Vec_IntArray(vConfgRes),
sizeof(
int), Vec_IntSize(vConfgRes), pFile );
989 printf(
"File \"%s\" with %d 6-input functions has been written out.\n", pFileName, Vec_IntSize(vConfgRes) );
990 Vec_WrdFree( vTruthRes );
991 Vec_IntFree( vConfgRes );
999 char * pFileName =
"dsdfuncs6.dat";
1001 Vec_Wrd_t * vTruthRes = Vec_WrdAlloc( size + 1 );
1002 Vec_Int_t * vConfgRes = Vec_IntAlloc( size );
1005 pFile = fopen( pFileName,
"rb" );
1006 RetValue = fread( Vec_WrdArray(vTruthRes),
sizeof(
word), size, pFile );
1007 RetValue = fread( Vec_IntArray(vConfgRes),
sizeof(
int), size, pFile );
1008 vTruthRes->nSize = size;
1009 vConfgRes->nSize = size;
1011 pHash = Hsh_WrdManHashArrayStart( vTruthRes, 1 );
1015 Hsh_IntManStop( pHash );
1016 Vec_WrdFree( vTruthRes );
1017 Vec_IntFree( vConfgRes );
1018 Abc_PrintTime( 1,
"Reading file", Abc_Clock() - clk );
#define ABC_SWAP(Type, a, b)
#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 ///.
struct Vec_Str_t_ Vec_Str_t
void Extra_PrintHex(FILE *pFile, unsigned *pTruth, int nVars)
unsigned __int64 word
DECLARATIONS ///.
int Kit_TruthIsop(unsigned *puTruth, int nVars, Vec_Int_t *vMemory, int fTryBoth)
void Kit_DsdPrintFromTruth(unsigned *pTruth, int nVars)
word Extra_Truth6SwapAdjacent(word t, int iVar)
word Extra_Truth6ChangePhase(word t, int iVar)
void Ifd_ManOperSuper_rec(Ifd_Man_t *p, int iLit, int Type, Vec_Int_t *vObjs)
void Ifd_ObjPrint(Ifd_Man_t *p, int iLit)
int * Ifd_ManComputeMatches(char *p)
int Ifd_ManHashFindOrAdd(Ifd_Man_t *p, int iDsd0, int iDsd1, int iDsdC, int Type)
int Ifd_ManHashLookup(Ifd_Man_t *p, int iDsd0, int iDsd1, int iDsdC, int Type)
Vec_Wrd_t * Extra_Truth6AllConfigs2(word t, int *pComp, int *pPerm, int nVars)
void Ifd_ManStop(Ifd_Man_t *p)
void Ifd_ManPrint(Ifd_Man_t *p)
int Ifd_ManFindDsd(Ifd_Man_t *pMan, char *p)
void Ifd_ManHashInsert(Ifd_Man_t *p, int iDsd0, int iDsd1, int iDsdC, int Type, int Res)
Vec_Wrd_t * Ifd_ManDsdTruths(int nVars)
int Mpm_ComputeCnfSizeOne(word Truth, int nVars, Vec_Int_t *vCover, Vec_Str_t *vCnf)
word Ifd_ObjTruth(Ifd_Man_t *p, int iLit)
void Ifd_ComputeSignature(word uTruth, int pCounts[6])
Ifd_Man_t * Ifd_ManStart()
FUNCTION DEFINITIONS ///.
struct Ifd_Man_t_ Ifd_Man_t
word Ifd_ObjTruth_rec(Ifd_Man_t *p, int iLit, int *pCounter)
void Ifd_ObjPrint_rec(Ifd_Man_t *p, int iLit, int *pCounter, int DiffType)
void Ifd_ManPrint2(Ifd_Man_t *p)
int Ifd_ManFindDsd_rec(Ifd_Man_t *pMan, char *pStr, char **p, int *pMatches)
Vec_Wrd_t * Extra_Truth6AllConfigs(word t, int *pComp, int *pPerm, int nVars)
void Ifd_ManTruthAll(Ifd_Man_t *p)
#define Ifd_ManForEachNodeWithSupp(p, nVars, pLeaf, i)
Vec_Int_t * Ifd_ManDsdPermJT(int n)
typedefABC_NAMESPACE_IMPL_START struct Ifd_Obj_t_ Ifd_Obj_t
DECLARATIONS ///.
void Mpm_ComputeCnfSizeAll(Ifd_Man_t *p)
int Ifd_ManOper(Ifd_Man_t *p, int iDsd0, int iDsd1, int iDsdC, int Type)
void Ifd_ManDsdPermPrint(int *perm, int size)
struct Hsh_IntMan_t_ Hsh_IntMan_t
#define Vec_IntForEachEntry(vVec, Entry, i)
MACRO DEFINITIONS ///.
#define Vec_IntForEachEntryStart(vVec, Entry, i, Start)
#define Vec_WrdForEachEntry(vVec, Entry, i)
MACRO DEFINITIONS ///.
typedefABC_NAMESPACE_HEADER_START struct Vec_Wrd_t_ Vec_Wrd_t
INCLUDES ///.