/**Function************************************************************* Synopsis [Returns 1 if the cone of the node overlaps with the vector.] Description [] SideEffects [] SeeAlso [] ***********************************************************************/ int Aig_ManFindConeOverlap_rec( Aig_Man_t * p, Aig_Obj_t * pNode ) { if ( Aig_ObjIsTravIdPrevious( p, pNode ) ) return 1; if ( Aig_ObjIsTravIdCurrent( p, pNode ) ) return 0; Aig_ObjSetTravIdCurrent( p, pNode ); if ( Aig_ObjIsCi(pNode) ) return 0; if ( Aig_ManFindConeOverlap_rec( p, Aig_ObjFanin0(pNode) ) ) return 1; if ( Aig_ManFindConeOverlap_rec( p, Aig_ObjFanin1(pNode) ) ) return 1; return 0; }
ABC_NAMESPACE_IMPL_START //////////////////////////////////////////////////////////////////////// /// DECLARATIONS /// //////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////// /// FUNCTION DEFINITIONS /// //////////////////////////////////////////////////////////////////////// /**Function************************************************************* Synopsis [] Description [] SideEffects [] SeeAlso [] ***********************************************************************/ int Llb_ManTracePaths_rec( Aig_Man_t * p, Aig_Obj_t * pObj, Aig_Obj_t * pPivot ) { Aig_Obj_t * pFanout; int k, iFan; if ( Aig_ObjIsTravIdPrevious(p, pObj) ) return 0; if ( Aig_ObjIsTravIdCurrent(p, pObj) ) return 1; if ( Saig_ObjIsLi(p, pObj) ) return 0; if ( Saig_ObjIsPo(p, pObj) ) return 0; if ( pObj == pPivot ) return 1; assert( Aig_ObjIsCand(pObj) ); Aig_ObjForEachFanout( p, pObj, pFanout, iFan, k ) if ( !Llb_ManTracePaths_rec( p, pFanout, pPivot ) ) { Aig_ObjSetTravIdPrevious(p, pObj); return 0; } Aig_ObjSetTravIdCurrent(p, pObj); return 1; }