21#ifndef ABC__aig__hop__hop_h
22#define ABC__aig__hop__hop_h
118static inline int Hop_BitWordNum(
int nBits ) {
return (nBits>>5) + ((nBits&31) > 0); }
119static inline int Hop_TruthWordNum(
int nVars ) {
return nVars <= 5 ? 1 : (1 << (nVars - 5)); }
120static inline int Hop_InfoHasBit(
unsigned *
p,
int i ) {
return (
p[(i)>>5] & (1<<((i) & 31))) > 0; }
121static inline void Hop_InfoSetBit(
unsigned *
p,
int i ) {
p[(i)>>5] |= (1<<((i) & 31)); }
122static inline void Hop_InfoXorBit(
unsigned *
p,
int i ) {
p[(i)>>5] ^= (1<<((i) & 31)); }
123static inline int Hop_Base2Log(
unsigned n ) {
int r;
if ( n < 2 )
return n;
for ( r = 0, n--; n; n >>= 1, r++ ) {};
return r; }
124static inline int Hop_Base10Log(
unsigned n ) {
int r;
if ( n < 2 )
return n;
for ( r = 0, n--; n; n /= 10, r++ ) {};
return r; }
129static inline int Hop_IsComplement(
Hop_Obj_t *
p ) {
return (
int)((ABC_PTRUINT_T)(
p) & 01); }
138static inline Hop_Edge_t Hop_EdgeCreate(
int Id,
int fCompl ) {
return (Id << 1) | fCompl; }
139static inline int Hop_EdgeId(
Hop_Edge_t Edge ) {
return Edge >> 1; }
140static inline int Hop_EdgeIsComplement(
Hop_Edge_t Edge ) {
return Edge & 1; }
151static inline int Hop_ManObjNum(
Hop_Man_t *
p ) {
return p->nCreated -
p->nDeleted; }
164static inline int Hop_ObjIsMarkA(
Hop_Obj_t * pObj ) {
return pObj->
fMarkA; }
165static inline void Hop_ObjSetMarkA(
Hop_Obj_t * pObj ) { pObj->
fMarkA = 1; }
166static inline void Hop_ObjClearMarkA(
Hop_Obj_t * pObj ) { pObj->
fMarkA = 0; }
168static inline void Hop_ObjSetTravId(
Hop_Obj_t * pObj,
int TravId ) { pObj->
pData = (
void *)(ABC_PTRINT_T)TravId; }
169static inline void Hop_ObjSetTravIdCurrent(
Hop_Man_t *
p,
Hop_Obj_t * pObj ) { pObj->
pData = (
void *)(ABC_PTRINT_T)
p->nTravIds; }
170static inline void Hop_ObjSetTravIdPrevious(
Hop_Man_t *
p,
Hop_Obj_t * pObj ) { pObj->
pData = (
void *)(ABC_PTRINT_T)(
p->nTravIds - 1); }
171static inline int Hop_ObjIsTravIdCurrent(
Hop_Man_t *
p,
Hop_Obj_t * pObj ) {
return (
int)((int)(ABC_PTRINT_T)pObj->
pData ==
p->nTravIds); }
172static inline int Hop_ObjIsTravIdPrevious(
Hop_Man_t *
p,
Hop_Obj_t * pObj ) {
return (
int)((int)(ABC_PTRINT_T)pObj->
pData ==
p->nTravIds - 1); }
174static inline int Hop_ObjTravId(
Hop_Obj_t * pObj ) {
return (
int)(ABC_PTRINT_T)pObj->
pData; }
175static inline int Hop_ObjPhase(
Hop_Obj_t * pObj ) {
return pObj->
fPhase; }
176static inline int Hop_ObjRefs(
Hop_Obj_t * pObj ) {
return pObj->
nRefs; }
177static inline void Hop_ObjRef(
Hop_Obj_t * pObj ) { pObj->
nRefs++; }
179static inline void Hop_ObjClearRef(
Hop_Obj_t * pObj ) { pObj->
nRefs = 0; }
180static inline int Hop_ObjFaninC0(
Hop_Obj_t * pObj ) {
return Hop_IsComplement(pObj->
pFanin0); }
181static inline int Hop_ObjFaninC1(
Hop_Obj_t * pObj ) {
return Hop_IsComplement(pObj->
pFanin1); }
186static inline Hop_Obj_t * Hop_ObjChild0Copy(
Hop_Obj_t * pObj ) {
assert( !Hop_IsComplement(pObj) );
return Hop_ObjFanin0(pObj)? Hop_NotCond((
Hop_Obj_t *)Hop_ObjFanin0(pObj)->pData, Hop_ObjFaninC0(pObj)) : NULL; }
187static inline Hop_Obj_t * Hop_ObjChild1Copy(
Hop_Obj_t * pObj ) {
assert( !Hop_IsComplement(pObj) );
return Hop_ObjFanin1(pObj)? Hop_NotCond((
Hop_Obj_t *)Hop_ObjFanin1(pObj)->pData, Hop_ObjFaninC1(pObj)) : NULL; }
188static inline int Hop_ObjChild0CopyI(
Hop_Obj_t * pObj ) {
assert( !Hop_IsComplement(pObj) );
return Hop_ObjFanin0(pObj)? Abc_LitNotCond(Hop_ObjFanin0(pObj)->iData, Hop_ObjFaninC0(pObj)) : -1; }
189static inline int Hop_ObjChild1CopyI(
Hop_Obj_t * pObj ) {
assert( !Hop_IsComplement(pObj) );
return Hop_ObjFanin1(pObj)? Abc_LitNotCond(Hop_ObjFanin1(pObj)->iData, Hop_ObjFaninC1(pObj)) : -1; }
190static inline int Hop_ObjLevel(
Hop_Obj_t * pObj ) {
return pObj->
nRefs; }
191static inline int Hop_ObjLevelNew(
Hop_Obj_t * pObj ) {
return 1 + Hop_ObjIsExor(pObj) + Abc_MaxInt(Hop_ObjFanin0(pObj)->nRefs, Hop_ObjFanin1(pObj)->nRefs); }
192static inline int Hop_ObjPhaseCompl(
Hop_Obj_t * pObj ) {
return Hop_IsComplement(pObj)? !Hop_Regular(pObj)->fPhase : pObj->
fPhase; }
196 if ( Hop_ObjFanin0(pObj) == pFanin )
return 0;
197 if ( Hop_ObjFanin1(pObj) == pFanin )
return 1;
202 if ( Hop_ObjFanin0(pFanout) == pObj )
return Hop_ObjFaninC0(pObj);
203 if ( Hop_ObjFanin1(pFanout) == pObj )
return Hop_ObjFaninC1(pObj);
211 assert( Type !=
AIG_AND || !Hop_ObjIsConst1(Hop_Regular(p0)) );
212 assert( p1 == NULL || !Hop_ObjIsConst1(Hop_Regular(p1)) );
213 assert( Type ==
AIG_PI || Hop_Regular(p0) != Hop_Regular(p1) );
214 pGhost = Hop_ManGhost(
p);
216 if ( Hop_Regular(p0)->Id < Hop_Regular(p1)->Id )
233 if (
p->pListFree == NULL )
235 pTemp =
p->pListFree;
240 assert(
p->nCreated == Vec_PtrSize(
p->vObjs) );
241 Vec_PtrPush(
p->vObjs, pTemp );
243 pTemp->
Id =
p->nCreated++;
250 p->pListFree = pEntry;
259#define Hop_ManForEachPi( p, pObj, i ) \
260 Vec_PtrForEachEntry( Hop_Obj_t *, p->vPis, pObj, i )
262#define Hop_ManForEachPo( p, pObj, i ) \
263 Vec_PtrForEachEntry( Hop_Obj_t *, p->vPos, pObj, i )
265#define Hop_ManForEachNode( p, pObj, i ) \
266 for ( i = 0; i < p->nTableSize; i++ ) \
267 if ( ((pObj) = p->pTable[i]) == NULL ) {} else
#define ABC_NAMESPACE_HEADER_END
#define ABC_NAMESPACE_HEADER_START
NAMESPACES ///.
typedefABC_NAMESPACE_IMPL_START struct Vec_Int_t_ Vec_Int_t
DECLARATIONS ///.
void Hop_ConeUnmark_rec(Hop_Obj_t *pObj)
void Hop_TableDelete(Hop_Man_t *p, Hop_Obj_t *pObj)
Hop_Man_t * Hop_ManDup(Hop_Man_t *p)
int Hop_TableCountEntries(Hop_Man_t *p)
void Hop_ObjConnect(Hop_Man_t *p, Hop_Obj_t *pObj, Hop_Obj_t *pFan0, Hop_Obj_t *pFan1)
Hop_Obj_t * Hop_ObjCreatePo(Hop_Man_t *p, Hop_Obj_t *pDriver)
Hop_Obj_t * Hop_Transfer(Hop_Man_t *pSour, Hop_Man_t *pDest, Hop_Obj_t *pObj, int nVars)
Hop_Obj_t * Hop_CreateOr(Hop_Man_t *p, int nVars)
typedefABC_NAMESPACE_HEADER_START struct Hop_Man_t_ Hop_Man_t
INCLUDES ///.
Hop_Obj_t * Hop_Complement(Hop_Man_t *p, Hop_Obj_t *pRoot, int iVar)
void Hop_TableInsert(Hop_Man_t *p, Hop_Obj_t *pObj)
Hop_Obj_t * Hop_Compose(Hop_Man_t *p, Hop_Obj_t *pRoot, Hop_Obj_t *pFunc, int iVar)
Hop_Obj_t * Hop_ObjRecognizeMux(Hop_Obj_t *pObj, Hop_Obj_t **ppObjT, Hop_Obj_t **ppObjE)
int Hop_ManCheck(Hop_Man_t *p)
DECLARATIONS ///.
void Hop_ManStartMemory(Hop_Man_t *p)
FUNCTION DEFINITIONS ///.
Hop_Obj_t * Hop_CreateAnd(Hop_Man_t *p, int nVars)
void Hop_ManPrintStats(Hop_Man_t *p)
Hop_Obj_t * Hop_Permute(Hop_Man_t *p, Hop_Obj_t *pRoot, int nRootVars, int *pPermute)
int Hop_ManCleanup(Hop_Man_t *p)
Hop_Obj_t * Hop_IthVar(Hop_Man_t *p, int i)
FUNCTION DEFINITIONS ///.
Hop_Obj_t * Hop_Remap(Hop_Man_t *p, Hop_Obj_t *pRoot, unsigned uSupp, int nVars)
Hop_Obj_t * Hop_Maj(Hop_Man_t *p, Hop_Obj_t *pA, Hop_Obj_t *pB, Hop_Obj_t *pC)
void Hop_ObjCleanData_rec(Hop_Obj_t *pObj)
Vec_Ptr_t * Hop_ManDfs(Hop_Man_t *p)
void Hop_ObjPrintVerbose(Hop_Obj_t *pObj, int fHaig)
Vec_Ptr_t * Hop_ManDfsNode(Hop_Man_t *p, Hop_Obj_t *pNode)
Hop_Obj_t * Hop_ObjCreate(Hop_Man_t *p, Hop_Obj_t *pGhost)
Hop_Obj_t * Hop_NodeBalanceBuildSuper(Hop_Man_t *p, Vec_Ptr_t *vSuper, Hop_Type_t Type, int fUpdateLevel)
Hop_Man_t * Hop_ManBalance(Hop_Man_t *p, int fUpdateLevel)
FUNCTION DECLARATIONS ///.
int Hop_ManCountLevels(Hop_Man_t *p)
void Hop_ObjDelete_rec(Hop_Man_t *p, Hop_Obj_t *pObj)
void Hop_ObjPrintEqn(FILE *pFile, Hop_Obj_t *pObj, Vec_Vec_t *vLevels, int Level)
void Hop_ManIncrementTravId(Hop_Man_t *p)
DECLARATIONS ///.
void Hop_TableProfile(Hop_Man_t *p)
void Hop_ManDumpBlif(Hop_Man_t *p, char *pFileName)
int Hop_ObjRecognizeExor(Hop_Obj_t *pObj, Hop_Obj_t **ppFan0, Hop_Obj_t **ppFan1)
Hop_Obj_t * Hop_Exor(Hop_Man_t *p, Hop_Obj_t *p0, Hop_Obj_t *p1)
void Hop_ObjCollectMulti(Hop_Obj_t *pFunc, Vec_Ptr_t *vSuper)
int Hop_ObjFanoutCount(Hop_Obj_t *pObj, Hop_Obj_t *pPivot)
Hop_Obj_t * Hop_TableLookup(Hop_Man_t *p, Hop_Obj_t *pGhost)
FUNCTION DEFINITIONS ///.
int Hop_ObjIsMuxType(Hop_Obj_t *pObj)
void Hop_ManPrintVerbose(Hop_Man_t *p, int fHaig)
Hop_Obj_t * Hop_CreateExor(Hop_Man_t *p, int nVars)
Hop_Obj_t * Hop_Miter(Hop_Man_t *p, Vec_Ptr_t *vPairs)
Hop_Obj_t * Hop_Oper(Hop_Man_t *p, Hop_Obj_t *p0, Hop_Obj_t *p1, Hop_Type_t Type)
int Hop_DagSize(Hop_Obj_t *pObj)
Hop_Obj_t * Hop_And(Hop_Man_t *p, Hop_Obj_t *p0, Hop_Obj_t *p1)
word Hop_ManComputeTruth6(Hop_Man_t *p, Hop_Obj_t *pObj, int nVars)
void Hop_ManStop(Hop_Man_t *p)
unsigned * Hop_ManConvertAigToTruth(Hop_Man_t *p, Hop_Obj_t *pRoot, int nVars, Vec_Int_t *vTruth, int fMsbFirst)
void Hop_ManStopMemory(Hop_Man_t *p)
void Hop_ObjPrintVerilog(FILE *pFile, Hop_Obj_t *pObj, Vec_Vec_t *vLevels, int Level, int fOnlyAnds)
void Hop_ObjCreateChoice(Hop_Obj_t *pOld, Hop_Obj_t *pNew)
void Hop_ObjDelete(Hop_Man_t *p, Hop_Obj_t *pObj)
void Hop_ObjDisconnect(Hop_Man_t *p, Hop_Obj_t *pObj)
void Hop_ManAddMemory(Hop_Man_t *p)
MACRO DEFINITIONS ///.
Hop_Obj_t * Hop_ObjCreatePi(Hop_Man_t *p)
DECLARATIONS ///.
void Hop_ManCreateRefs(Hop_Man_t *p)
Hop_Obj_t * Hop_Or(Hop_Man_t *p, Hop_Obj_t *p0, Hop_Obj_t *p1)
Hop_Obj_t * Hop_Mux(Hop_Man_t *p, Hop_Obj_t *pC, Hop_Obj_t *p1, Hop_Obj_t *p0)
Hop_Man_t * Hop_ManStart()
DECLARATIONS ///.
Hop_Obj_t * Hop_ObjRepr(Hop_Obj_t *pObj)
struct Hop_Obj_t_ Hop_Obj_t
void Hop_ManCleanData(Hop_Man_t *p)
unsigned __int64 word
DECLARATIONS ///.
typedefABC_NAMESPACE_HEADER_START struct Vec_Ptr_t_ Vec_Ptr_t
INCLUDES ///.
typedefABC_NAMESPACE_HEADER_START struct Vec_Vec_t_ Vec_Vec_t
INCLUDES ///.