47 assert( !Hop_IsComplement(pObj) );
48 if ( !Hop_ObjIsNode(pObj) || Hop_ObjIsMarkA(pObj) )
52 assert( !Hop_ObjIsMarkA(pObj) );
53 Hop_ObjSetMarkA(pObj);
54 Vec_PtrPush( vNodes, pObj );
73 vNodes = Vec_PtrAlloc( Hop_ManNodeNum(
p) );
77 Hop_ObjClearMarkA(pObj);
97 assert( !Hop_IsComplement(pNode) );
98 vNodes = Vec_PtrAlloc( 16 );
101 Hop_ObjClearMarkA(pObj);
120 int i, LevelsMax, Level0, Level1;
122 Hop_ManConst1(
p)->pData = NULL;
129 Level0 = (int)(ABC_PTRUINT_T)Hop_ObjFanin0(pObj)->pData;
130 Level1 = (int)(ABC_PTRUINT_T)Hop_ObjFanin1(pObj)->pData;
131 pObj->
pData = (
void *)(ABC_PTRUINT_T)(1 + Hop_ObjIsExor(pObj) + Abc_MaxInt(Level0, Level1));
133 Vec_PtrFree( vNodes );
137 LevelsMax = Abc_MaxInt( LevelsMax, (
int)(ABC_PTRUINT_T)Hop_ObjFanin0(pObj)->pData );
160 Hop_ObjClearRef( Hop_ManConst1(
p) );
162 Hop_ObjClearRef( pObj );
164 Hop_ObjClearRef( pObj );
166 Hop_ObjClearRef( pObj );
170 Hop_ObjRef( Hop_ObjFanin0(pObj) );
171 Hop_ObjRef( Hop_ObjFanin1(pObj) );
174 Hop_ObjRef( Hop_ObjFanin0(pObj) );
190 assert( !Hop_IsComplement(pObj) );
191 if ( !Hop_ObjIsNode(pObj) || Hop_ObjIsMarkA(pObj) )
195 assert( !Hop_ObjIsMarkA(pObj) );
196 Hop_ObjSetMarkA( pObj );
212 assert( !Hop_IsComplement(pObj) );
213 if ( !Hop_ObjIsNode(pObj) || Hop_ObjIsMarkA(pObj) )
217 assert( !Hop_ObjIsMarkA(pObj) );
218 Hop_ObjSetMarkA( pObj );
236 assert( !Hop_IsComplement(pObj) );
237 if ( !Hop_ObjIsNode(pObj) || Hop_ObjIsMarkA(pObj) )
241 assert( !Hop_ObjIsMarkA(pObj) );
242 Hop_ObjSetMarkA( pObj );
259 assert( !Hop_IsComplement(pObj) );
260 if ( !Hop_ObjIsNode(pObj) || !Hop_ObjIsMarkA(pObj) )
264 assert( Hop_ObjIsMarkA(pObj) );
265 Hop_ObjClearMarkA( pObj );
301 assert( !Hop_IsComplement(pObj) );
302 if ( !Hop_ObjIsNode(pObj) || Hop_ObjIsMarkA(pObj) )
303 return (
int)(pObj == pPivot);
306 assert( !Hop_ObjIsMarkA(pObj) );
307 Hop_ObjSetMarkA( pObj );
313 assert( !Hop_IsComplement(pPivot) );
332 assert( !Hop_IsComplement(pObj) );
333 if ( !Hop_ObjIsNode(pObj) || Hop_ObjIsMarkA(pObj) )
337 pObj->
pData =
Hop_And( pDest, Hop_ObjChild0Copy(pObj), Hop_ObjChild1Copy(pObj) );
338 assert( !Hop_ObjIsMarkA(pObj) );
339 Hop_ObjSetMarkA( pObj );
358 if ( pSour == pDest )
360 if ( Hop_ObjIsConst1( Hop_Regular(pRoot) ) )
361 return Hop_NotCond( Hop_ManConst1(pDest), Hop_IsComplement(pRoot) );
373 return Hop_NotCond( (
Hop_Obj_t *)Hop_Regular(pRoot)->pData, Hop_IsComplement(pRoot) );
389 assert( !Hop_IsComplement(pObj) );
390 if ( Hop_ObjIsMarkA(pObj) )
392 if ( Hop_ObjIsConst1(pObj) || Hop_ObjIsPi(pObj) )
394 pObj->
pData = pObj == pVar ? pFunc : pObj;
399 pObj->
pData =
Hop_And(
p, Hop_ObjChild0Copy(pObj), Hop_ObjChild1Copy(pObj) );
400 assert( !Hop_ObjIsMarkA(pObj) );
401 Hop_ObjSetMarkA( pObj );
418 if ( iVar >= Hop_ManPiNum(
p) )
420 printf(
"Hop_Compose(): The PI variable %d is not defined.\n", iVar );
427 return Hop_NotCond( (
Hop_Obj_t *)Hop_Regular(pRoot)->pData, Hop_IsComplement(pRoot) );
443 assert( !Hop_IsComplement(pObj) );
444 if ( Hop_ObjIsMarkA(pObj) )
446 if ( Hop_ObjIsConst1(pObj) || Hop_ObjIsPi(pObj) )
448 pObj->
pData = pObj == pVar ? Hop_Not(pObj) : pObj;
453 pObj->
pData =
Hop_And(
p, Hop_ObjChild0Copy(pObj), Hop_ObjChild1Copy(pObj) );
454 assert( !Hop_ObjIsMarkA(pObj) );
455 Hop_ObjSetMarkA( pObj );
472 if ( iVar >= Hop_ManPiNum(
p) )
474 printf(
"Hop_Complement(): The PI variable %d is not defined.\n", iVar );
481 return Hop_NotCond( (
Hop_Obj_t *)Hop_Regular(pRoot)->pData, Hop_IsComplement(pRoot) );
497 assert( !Hop_IsComplement(pObj) );
498 if ( !Hop_ObjIsNode(pObj) || Hop_ObjIsMarkA(pObj) )
502 pObj->
pData =
Hop_And(
p, Hop_ObjChild0Copy(pObj), Hop_ObjChild1Copy(pObj) );
503 assert( !Hop_ObjIsMarkA(pObj) );
504 Hop_ObjSetMarkA( pObj );
523 if ( nVars > Hop_ManPiNum(
p) )
525 printf(
"Hop_Remap(): The number of variables (%d) is more than the manager size (%d).\n", nVars, Hop_ManPiNum(
p) );
529 if ( Hop_ObjIsConst1( Hop_Regular(pRoot) ) )
532 return Hop_NotCond( Hop_ManConst0(
p), Hop_ObjPhaseCompl(pRoot) );
539 if ( uSupp & (1 << i) )
542 pObj->
pData = Hop_ManConst0(
p);
544 assert( k > 0 && k < nVars );
549 return Hop_NotCond( (
Hop_Obj_t *)Hop_Regular(pRoot)->pData, Hop_IsComplement(pRoot) );
568 if ( Hop_ObjIsConst1( Hop_Regular(pRoot) ) )
573 if ( i == nRootVars )
575 assert( pPermute[i] >= 0 && pPermute[i] < Hop_ManPiNum(
p) );
582 return Hop_NotCond( (
Hop_Obj_t *)Hop_Regular(pRoot)->pData, Hop_IsComplement(pRoot) );
#define ABC_NAMESPACE_IMPL_START
#define ABC_NAMESPACE_IMPL_END
void Hop_ConeUnmark_rec(Hop_Obj_t *pObj)
Hop_Obj_t * Hop_Complement(Hop_Man_t *p, Hop_Obj_t *pRoot, int iVar)
Hop_Obj_t * Hop_Compose(Hop_Man_t *p, Hop_Obj_t *pRoot, Hop_Obj_t *pFunc, int iVar)
ABC_NAMESPACE_IMPL_START void Hop_ManDfs_rec(Hop_Obj_t *pObj, Vec_Ptr_t *vNodes)
DECLARATIONS ///.
Hop_Obj_t * Hop_Permute(Hop_Man_t *p, Hop_Obj_t *pRoot, int nRootVars, int *pPermute)
Hop_Obj_t * Hop_Remap(Hop_Man_t *p, Hop_Obj_t *pRoot, unsigned uSupp, int nVars)
Vec_Ptr_t * Hop_ManDfs(Hop_Man_t *p)
Vec_Ptr_t * Hop_ManDfsNode(Hop_Man_t *p, Hop_Obj_t *pNode)
int Hop_ManCountLevels(Hop_Man_t *p)
void Hop_Transfer_rec(Hop_Man_t *pDest, Hop_Obj_t *pObj)
void Hop_Remap_rec(Hop_Man_t *p, Hop_Obj_t *pObj)
int Hop_ObjFanoutCount(Hop_Obj_t *pObj, Hop_Obj_t *pPivot)
void Hop_Compose_rec(Hop_Man_t *p, Hop_Obj_t *pObj, Hop_Obj_t *pFunc, Hop_Obj_t *pVar)
int Hop_DagSize(Hop_Obj_t *pObj)
int Hop_ObjFanoutCount_rec(Hop_Obj_t *pObj, Hop_Obj_t *pPivot)
Hop_Obj_t * Hop_Transfer(Hop_Man_t *pSour, Hop_Man_t *pDest, Hop_Obj_t *pRoot, int nVars)
void Hop_ConeCleanAndMark_rec(Hop_Obj_t *pObj)
void Hop_ConeMark_rec(Hop_Obj_t *pObj)
int Hop_ConeCountAndMark_rec(Hop_Obj_t *pObj)
void Hop_Complement_rec(Hop_Man_t *p, Hop_Obj_t *pObj, Hop_Obj_t *pVar)
void Hop_ManCreateRefs(Hop_Man_t *p)
typedefABC_NAMESPACE_HEADER_START struct Hop_Man_t_ Hop_Man_t
INCLUDES ///.
Hop_Obj_t * Hop_IthVar(Hop_Man_t *p, int i)
FUNCTION DEFINITIONS ///.
#define Hop_ManForEachPi(p, pObj, i)
ITERATORS ///.
#define Hop_ManForEachNode(p, pObj, i)
Hop_Obj_t * Hop_And(Hop_Man_t *p, Hop_Obj_t *p0, Hop_Obj_t *p1)
#define Hop_ManForEachPo(p, pObj, i)
struct Hop_Obj_t_ Hop_Obj_t
typedefABC_NAMESPACE_HEADER_START struct Vec_Ptr_t_ Vec_Ptr_t
INCLUDES ///.
#define Vec_PtrForEachEntry(Type, vVec, pEntry, i)
MACRO DEFINITIONS ///.