31static unsigned Ivy_Hash(
Ivy_Obj_t * pObj,
int TableSize )
33 unsigned Key = Ivy_ObjIsExor(pObj) * 1699;
34 Key ^= Ivy_ObjFaninId0(pObj) * 7937;
35 Key ^= Ivy_ObjFaninId1(pObj) * 2971;
36 Key ^= Ivy_ObjFaninC0(pObj) * 911;
37 Key ^= Ivy_ObjFaninC1(pObj) * 353;
38 Key ^= Ivy_ObjInit(pObj) * 911;
39 return Key % TableSize;
46 assert( Ivy_ObjIsHash(pObj) );
47 for ( i = Ivy_Hash(pObj,
p->nTableSize);
p->pTable[i]; i = (i+1) %
p->nTableSize )
48 if (
p->pTable[i] == pObj->
Id )
54static unsigned int Cudd_PrimeAig(
unsigned int p );
75 assert( !Ivy_IsComplement(pObj) );
76 if ( !Ivy_ObjIsHash(pObj) )
78 assert( Ivy_ObjIsLatch(pObj) || Ivy_ObjFaninId0(pObj) > 0 );
79 assert( Ivy_ObjFaninId1(pObj) == 0 || Ivy_ObjFaninId0(pObj) < Ivy_ObjFaninId1(pObj) );
80 if ( Ivy_ObjFanin0(pObj)->nRefs == 0 || (Ivy_ObjChild1(pObj) && Ivy_ObjFanin1(pObj)->nRefs == 0) )
82 for ( i = Ivy_Hash(pObj,
p->nTableSize);
p->pTable[i]; i = (i+1) %
p->nTableSize )
84 pEntry = Ivy_ManObj(
p,
p->pTable[i] );
85 if ( Ivy_ObjChild0(pEntry) == Ivy_ObjChild0(pObj) &&
86 Ivy_ObjChild1(pEntry) == Ivy_ObjChild1(pObj) &&
87 Ivy_ObjInit(pEntry) == Ivy_ObjInit(pObj) &&
88 Ivy_ObjType(pEntry) == Ivy_ObjType(pObj) )
108 assert( !Ivy_IsComplement(pObj) );
109 if ( !Ivy_ObjIsHash(pObj) )
111 if ( (pObj->
Id & 63) == 0 )
113 if (
p->nTableSize < 2 * Ivy_ManHashObjNum(
p) )
114 Ivy_TableResize(
p );
116 pPlace = Ivy_TableFind(
p, pObj );
136 assert( !Ivy_IsComplement(pObj) );
137 if ( !Ivy_ObjIsHash(pObj) )
139 pPlace = Ivy_TableFind(
p, pObj );
143 i = pPlace -
p->pTable;
144 for ( i = (i+1) %
p->nTableSize;
p->pTable[i]; i = (i+1) %
p->nTableSize )
146 pEntry = Ivy_ManObj(
p,
p->pTable[i] );
168 assert( !Ivy_IsComplement(pObj) );
169 if ( !Ivy_ObjIsHash(pObj) )
171 pPlace = Ivy_TableFind(
p, pObj );
190 for ( i = 0; i <
p->nTableSize; i++ )
191 Counter += (
p->pTable[i] != 0);
208 int * pTableOld, * pPlace;
209 int nTableSizeOld, Counter, nEntries, e;
213 pTableOld =
p->pTable;
214 nTableSizeOld =
p->nTableSize;
216 p->nTableSize = Abc_PrimeCudd( 5 * Ivy_ManHashObjNum(
p) );
218 memset(
p->pTable, 0,
sizeof(
int) *
p->nTableSize );
221 for ( e = 0; e < nTableSizeOld; e++ )
223 if ( pTableOld[e] == 0 )
227 pPlace = Ivy_TableFind(
p, Ivy_ManObj(
p, pTableOld[e]) );
229 *pPlace = pTableOld[e];
231 nEntries = Ivy_ManHashObjNum(
p);
253 for ( i = 0; i <
p->nTableSize; i++ )
259 printf(
"%d ", Counter );
#define ABC_ALLOC(type, num)
#define ABC_NAMESPACE_IMPL_START
#define ABC_NAMESPACE_IMPL_END
void Ivy_TableInsert(Ivy_Man_t *p, Ivy_Obj_t *pObj)
Ivy_Obj_t * Ivy_TableLookup(Ivy_Man_t *p, Ivy_Obj_t *pObj)
FUNCTION DEFINITIONS ///.
void Ivy_TableDelete(Ivy_Man_t *p, Ivy_Obj_t *pObj)
void Ivy_TableUpdate(Ivy_Man_t *p, Ivy_Obj_t *pObj, int ObjIdNew)
void Ivy_TableProfile(Ivy_Man_t *p)
int Ivy_TableCountEntries(Ivy_Man_t *p)
typedefABC_NAMESPACE_HEADER_START struct Ivy_Man_t_ Ivy_Man_t
INCLUDES ///.
struct Ivy_Obj_t_ Ivy_Obj_t