53 p->nBins = Abc_PrimeCudd(nSize);
98 pEnt = p1, p1 = p2, p2 = pEnt;
102 if ( pEnt->
p1 == p1 && pEnt->
p2 == p2 )
108 if (
p->nEntries >= 2 *
p->nBins )
110 Fraig_TableResizeS(
p );
117 p->pBins[Key] = pEnt;
143 Key = pNode->
uHashR %
p->nBins;
167 if (
p->nEntries >= 2 *
p->nBins )
169 Fraig_TableResizeF(
p, 1 );
170 Key = pNode->
uHashR %
p->nBins;
175 p->pBins[Key] = pNode;
200 Key = pNode->
uHashD %
p->nBins;
211 if (
p->nEntries >= 2 *
p->nBins )
213 Fraig_TableResizeF(
p, 0 );
214 Key = pNode->
uHashD %
p->nBins;
219 p->pBins[Key] = pNode;
240 unsigned Key = pNode->
uHashD %
p->nBins;
243 p->pBins[Key] = pNode;
263 int nBinsNew, Counter, i;
269 nBinsNew = Abc_PrimeCudd(2 *
p->nBins);
275 for ( i = 0; i <
p->nBins; i++ )
279 pEnt->
pNextS = pBinsNew[Key];
280 pBinsNew[Key] = pEnt;
283 assert( Counter ==
p->nEntries );
307 int nBinsNew, Counter, i;
313 nBinsNew = Abc_PrimeCudd(2 *
p->nBins);
319 for ( i = 0; i <
p->nBins; i++ )
323 Key = pEnt->
uHashR % nBinsNew;
325 Key = pEnt->
uHashD % nBinsNew;
326 pEnt->
pNextF = pBinsNew[Key];
327 pBinsNew[Key] = pEnt;
330 assert( Counter ==
p->nEntries );
362 for ( i = 0; i < iWordLast; i++ )
372 for ( i = 0; i < iWordLast; i++ )
396 fCompl ^= pNode1->
fInv;
397 fCompl ^= pNode2->
fInv;
403 for ( i = 0; i < iWordLast; i++ )
405 for ( v = 0; v < 32; v++ )
406 if ( (pNode1->
puSimR[i] ^ ~pNode2->
puSimR[i]) & (1 << v) )
411 for ( i = 0; i < iWordLast; i++ )
413 for ( v = 0; v < 32; v++ )
414 if ( (pNode1->
puSimD[i] ^ ~pNode2->
puSimD[i]) & (1 << v) )
422 for ( i = 0; i < iWordLast; i++ )
424 for ( v = 0; v < 32; v++ )
425 if ( (pNode1->
puSimR[i] ^ pNode2->
puSimR[i]) & (1 << v) )
430 for ( i = 0; i < iWordLast; i++ )
432 for ( v = 0; v < 32; v++ )
433 if ( (pNode1->
puSimD[i] ^ pNode2->
puSimD[i]) & (1 << v) )
453 unsigned * pSims1, * pSims2;
461 for ( i = 0; i < iWordLast; i++ )
462 if ( (pSims1[i] & puMask[i]) != (pSims2[i] & puMask[i]) )
480 unsigned * pSims1, * pSims2;
488 for ( i = 0; i < iWordLast; i++ )
489 puMask[i] = ( pSims1[i] ^ pSims2[i] );
510 printf(
"Structural table. Table size = %d. Number of entries = %d.\n", pT->
nBins, pT->
nEntries );
511 for ( i = 0; i < pT->
nBins; i++ )
518 printf(
"%d ", Counter );
520 printf(
"{%d} ", i );
543 printf(
"Functional table. Table size = %d. Number of entries = %d.\n", pT->
nBins, pT->
nEntries );
544 for ( i = 0; i < pT->
nBins; i++ )
550 printf(
"{%d} ", Counter );
572 printf(
"Zero-node table. Table size = %d. Number of entries = %d.\n", pT->
nBins, pT->
nEntries );
573 for ( i = 0; i < pT->
nBins; i++ )
608 Fraig_Node_t * pEntF, * pEntF2, * pEnt, * pEntD2, * pEntN;
609 int ReturnValue, Counter, i;
620 for ( i = 0; i < pT->
nBins; i++ )
646 pEnt->
pNextF = pBinsNew[Key];
647 pBinsNew[Key] = pEnt;
654 pT->
pBins = pBinsNew;
#define ABC_ALLOC(type, num)
#define ABC_NAMESPACE_IMPL_START
#define ABC_NAMESPACE_IMPL_END
#define Fraig_HashKey2(a, b, TSIZE)
#define Fraig_TableBinForEachEntrySafeF(pBin, pEnt, pEnt2)
#define Fraig_TableBinForEachEntryF(pBin, pEnt)
#define Fraig_TableBinForEachEntryS(pBin, pEnt)
#define Fraig_TableBinForEachEntrySafeD(pBin, pEnt, pEnt2)
#define Fraig_TableBinForEachEntryD(pBin, pEnt)
Fraig_Node_t * Fraig_NodeCreate(Fraig_Man_t *p, Fraig_Node_t *p1, Fraig_Node_t *p2)
#define Fraig_TableBinForEachEntrySafeS(pBin, pEnt, pEnt2)
void Fraig_HashTableFree(Fraig_HashTable_t *p)
Fraig_Node_t * Fraig_HashTableLookupF(Fraig_Man_t *pMan, Fraig_Node_t *pNode)
int Fraig_CompareSimInfo(Fraig_Node_t *pNode1, Fraig_Node_t *pNode2, int iWordLast, int fUseRand)
void Fraig_TablePrintStatsF(Fraig_Man_t *pMan)
int Fraig_TableRehashF0(Fraig_Man_t *pMan, int fLinkEquiv)
void Fraig_CollectXors(Fraig_Node_t *pNode1, Fraig_Node_t *pNode2, int iWordLast, int fUseRand, unsigned *puMask)
int Fraig_HashTableLookupS(Fraig_Man_t *pMan, Fraig_Node_t *p1, Fraig_Node_t *p2, Fraig_Node_t **ppNodeRes)
int Fraig_CompareSimInfoUnderMask(Fraig_Node_t *pNode1, Fraig_Node_t *pNode2, int iWordLast, int fUseRand, unsigned *puMask)
void Fraig_TablePrintStatsS(Fraig_Man_t *pMan)
Fraig_Node_t * Fraig_HashTableLookupF0(Fraig_Man_t *pMan, Fraig_Node_t *pNode)
int Fraig_FindFirstDiff(Fraig_Node_t *pNode1, Fraig_Node_t *pNode2, int fCompl, int iWordLast, int fUseRand)
void Fraig_HashTableInsertF0(Fraig_Man_t *pMan, Fraig_Node_t *pNode)
void Fraig_TablePrintStatsF0(Fraig_Man_t *pMan)
Fraig_HashTable_t * Fraig_HashTableCreate(int nSize)
FUNCTION DEFINITIONS ///.
#define Fraig_IsComplement(p)
GLOBAL VARIABLES ///.
typedefABC_NAMESPACE_HEADER_START struct Fraig_ManStruct_t_ Fraig_Man_t
INCLUDES ///.
struct Fraig_NodeStruct_t_ Fraig_Node_t
struct Fraig_HashTableStruct_t_ Fraig_HashTable_t