/**CFile**************************************************************** FileName [hopMan.c] SystemName [ABC: Logic synthesis and verification system.] PackageName [Minimalistic And-Inverter Graph package.] Synopsis [AIG manager.] Author [Alan Mishchenko] Affiliation [UC Berkeley] Date [Ver. 1.0. Started - May 11, 2006.] Revision [$Id: hopMan.c,v 1.00 2006/05/11 00:00:00 alanmi Exp $] ***********************************************************************/ #include "hop.h" ABC_NAMESPACE_IMPL_START //////////////////////////////////////////////////////////////////////// /// DECLARATIONS /// //////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////// /// FUNCTION DEFINITIONS /// //////////////////////////////////////////////////////////////////////// /**Function************************************************************* Synopsis [Starts the AIG manager.] Description [] SideEffects [] SeeAlso [] ***********************************************************************/ Hop_Man_t * Hop_ManStart() { Hop_Man_t * p; // start the manager p = ABC_ALLOC( Hop_Man_t, 1 ); memset( p, 0, sizeof(Hop_Man_t) ); // perform initializations p->nTravIds = 1; p->fRefCount = 1; p->fCatchExor = 0; // allocate arrays for nodes p->vPis = Vec_PtrAlloc( 100 ); p->vPos = Vec_PtrAlloc( 100 ); // prepare the internal memory manager Hop_ManStartMemory( p ); // create the constant node p->pConst1 = Hop_ManFetchMemory( p ); p->pConst1->Type = AIG_CONST1; p->pConst1->fPhase = 1; p->nCreated = 1; // start the table // p->nTableSize = 107; p->nTableSize = 10007; p->pTable = ABC_ALLOC( Hop_Obj_t *, p->nTableSize ); memset( p->pTable, 0, sizeof(Hop_Obj_t *) * p->nTableSize ); return p; } /**Function************************************************************* Synopsis [Stops the AIG manager.] Description [] SideEffects [] SeeAlso [] ***********************************************************************/ void Hop_ManStop( Hop_Man_t * p ) { Hop_Obj_t * pObj; int i; // make sure the nodes have clean marks pObj = Hop_ManConst1(p); assert( !pObj->fMarkA && !pObj->fMarkB ); Hop_ManForEachPi( p, pObj, i ) assert( !pObj->fMarkA && !pObj->fMarkB ); Hop_ManForEachPo( p, pObj, i ) assert( !pObj->fMarkA && !pObj->fMarkB ); Hop_ManForEachNode( p, pObj, i ) assert( !pObj->fMarkA && !pObj->fMarkB ); // print time if ( p->time1 ) { ABC_PRT( "time1", p->time1 ); } if ( p->time2 ) { ABC_PRT( "time2", p->time2 ); } // Hop_TableProfile( p ); if ( p->vChunks ) Hop_ManStopMemory( p ); if ( p->vPis ) Vec_PtrFree( p->vPis ); if ( p->vPos ) Vec_PtrFree( p->vPos ); if ( p->vObjs ) Vec_PtrFree( p->vObjs ); ABC_FREE( p->pTable ); ABC_FREE( p ); } /**Function************************************************************* Synopsis [Returns the number of dangling nodes removed.] Description [] SideEffects [] SeeAlso [] ***********************************************************************/ int Hop_ManCleanup( Hop_Man_t * p ) { Vec_Ptr_t * vObjs; Hop_Obj_t * pNode; int i, nNodesOld; assert( p->fRefCount ); nNodesOld = Hop_ManNodeNum(p); // collect roots of dangling nodes vObjs = Vec_PtrAlloc( 100 ); Hop_ManForEachNode( p, pNode, i ) if ( Hop_ObjRefs(pNode) == 0 ) Vec_PtrPush( vObjs, pNode ); // recursively remove dangling nodes Vec_PtrForEachEntry( Hop_Obj_t *, vObjs, pNode, i ) Hop_ObjDelete_rec( p, pNode ); Vec_PtrFree( vObjs ); return nNodesOld - Hop_ManNodeNum(p); } /**Function************************************************************* Synopsis [Stops the AIG manager.] Description [] SideEffects [] SeeAlso [] ***********************************************************************/ void Hop_ManPrintStats( Hop_Man_t * p ) { printf( "PI/PO = %d/%d. ", Hop_ManPiNum(p), Hop_ManPoNum(p) ); printf( "A = %7d. ", Hop_ManAndNum(p) ); printf( "X = %5d. ", Hop_ManExorNum(p) ); printf( "Cre = %7d. ", p->nCreated ); printf( "Del = %7d. ", p->nDeleted ); printf( "Lev = %3d. ", Hop_ManCountLevels(p) ); printf( "\n" ); } //////////////////////////////////////////////////////////////////////// /// END OF FILE /// //////////////////////////////////////////////////////////////////////// ABC_NAMESPACE_IMPL_END