31static unsigned long Hop_Hash(
Hop_Obj_t * pObj,
int TableSize )
33 unsigned long Key = Hop_ObjIsExor(pObj) * 1699;
34 Key ^= Hop_ObjFanin0(pObj)->Id * 7937;
35 Key ^= Hop_ObjFanin1(pObj)->Id * 2971;
36 Key ^= Hop_ObjFaninC0(pObj) * 911;
37 Key ^= Hop_ObjFaninC1(pObj) * 353;
38 return Key % TableSize;
45 assert( Hop_ObjChild0(pObj) && Hop_ObjChild1(pObj) );
46 assert( Hop_ObjFanin0(pObj)->Id < Hop_ObjFanin1(pObj)->Id );
47 for ( ppEntry =
p->pTable + Hop_Hash(pObj,
p->nTableSize); *ppEntry; ppEntry = &(*ppEntry)->pNext )
48 if ( *ppEntry == pObj )
50 assert( *ppEntry == NULL );
74 assert( !Hop_IsComplement(pGhost) );
75 assert( Hop_ObjChild0(pGhost) && Hop_ObjChild1(pGhost) );
76 assert( Hop_ObjFanin0(pGhost)->Id < Hop_ObjFanin1(pGhost)->Id );
77 if (
p->fRefCount && (!Hop_ObjRefs(Hop_ObjFanin0(pGhost)) || !Hop_ObjRefs(Hop_ObjFanin1(pGhost))) )
79 for ( pEntry =
p->pTable[Hop_Hash(pGhost,
p->nTableSize)]; pEntry; pEntry = pEntry->
pNext )
81 if ( Hop_ObjChild0(pEntry) == Hop_ObjChild0(pGhost) &&
82 Hop_ObjChild1(pEntry) == Hop_ObjChild1(pGhost) &&
83 Hop_ObjType(pEntry) == Hop_ObjType(pGhost) )
103 assert( !Hop_IsComplement(pObj) );
105 if ( (pObj->
Id & 0xFF) == 0 && 2 *
p->nTableSize < Hop_ManNodeNum(
p) )
106 Hop_TableResize(
p );
107 ppPlace = Hop_TableFind(
p, pObj );
108 assert( *ppPlace == NULL );
126 assert( !Hop_IsComplement(pObj) );
127 ppPlace = Hop_TableFind(
p, pObj );
128 assert( *ppPlace == pObj );
130 *ppPlace = pObj->
pNext;
149 for ( i = 0; i <
p->nTableSize; i++ )
150 for ( pEntry =
p->pTable[i]; pEntry; pEntry = pEntry->
pNext )
170 int nTableSizeOld, Counter, nEntries, i;
174 pTableOld =
p->pTable;
175 nTableSizeOld =
p->nTableSize;
177 p->nTableSize = Abc_PrimeCudd( 2 * Hop_ManNodeNum(
p) );
182 for ( i = 0; i < nTableSizeOld; i++ )
183 for ( pEntry = pTableOld[i], pNext = pEntry? pEntry->
pNext : NULL; pEntry; pEntry = pNext, pNext = pEntry? pEntry->
pNext : NULL )
186 ppPlace = Hop_TableFind(
p, pEntry );
187 assert( *ppPlace == NULL );
190 pEntry->
pNext = NULL;
193 nEntries = Hop_ManNodeNum(
p);
194 assert( Counter == nEntries );
216 for ( i = 0; i <
p->nTableSize; i++ )
219 for ( pEntry =
p->pTable[i]; pEntry; pEntry = pEntry->
pNext )
222 printf(
"%d ", Counter );
#define ABC_ALLOC(type, num)
#define ABC_NAMESPACE_IMPL_START
#define ABC_NAMESPACE_IMPL_END
void Hop_TableDelete(Hop_Man_t *p, Hop_Obj_t *pObj)
int Hop_TableCountEntries(Hop_Man_t *p)
void Hop_TableInsert(Hop_Man_t *p, Hop_Obj_t *pObj)
void Hop_TableProfile(Hop_Man_t *p)
Hop_Obj_t * Hop_TableLookup(Hop_Man_t *p, Hop_Obj_t *pGhost)
FUNCTION DEFINITIONS ///.
typedefABC_NAMESPACE_HEADER_START struct Hop_Man_t_ Hop_Man_t
INCLUDES ///.
struct Hop_Obj_t_ Hop_Obj_t